書評: 『ハイパフォーマンス JavaScript』 Nicholas C. Zakas 著, 水野 貴明 訳
- 作者: Nicholas C. Zakas,水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/03/20
- メディア: 大型本
- 購入: 9人 クリック: 1,176回
- この商品を含むブログ (33件) を見る
『ハイパフォーマンス JavaScript』 を読み終わりました。 簡単に内容についてと感想を書いておきます。
続きを読むpg_stat_statements を使って遅いクエリを見つける (PostgreSQL, Ubuntu 10.04)
PostgreSQL などのリレーショナルデータベース (RDB) に対して発行されたクエリのうち、どのクエリで時間がかかっているのかを調べることは重要です。 そのための手段は色々ありますが、ここでは PostgreSQL のバージョン 8.4 以降で使用できる pg_stat_statements について、Ubuntu での使い方を説明します。
続きを読むJava プログラマのための C# 入門 (#3 クラス定義の基本とメソッド)
「#2 配列と文字列」 に引き続き、今回は C# のクラス定義の基本とメソッドのパラメータについて Java との違いをメモしておきます。 参考にしている書籍は 『独習 C#』 です。
C# のクラスに関して、フィールドやメソッド、コンストラクタについてはほとんど Java と同じですが、インデクサやプロパティといった Java にはないものも定義できます。 また、メソッドに関して、パラメータを参照渡しにしたり、可変個数のパラメータを受け取るようにすることもできます。 今回はクラス定義の基本と、パラメータの参照渡しや可変個数のパラメータを受け取るメソッドの定義について。 インデクサやプロパティなどについてはまた次回書きます。
続きを読むJava プログラマのための C# 入門 (#2 配列と文字列)
「#1 プリミティブ型と制御構文」 に引き続き、今回は C# の配列についてと文字列について Java との違いをメモしておきます。 参考にしている書籍は 『独習 C#』 です。
続きを読むJavaScript の正規表現マッチング
JavaScript で正規表現 (RegExp オブジェクト) を使ってマッチングする方法。 しょっちゅう忘れてしまううえに ECMAScript 仕様に適合した方法があまり web 上に書かれていないようなので軽くメモしておきます。
RegExp.prototype.exec( string )
メソッド
正規表現のマッチングを試して、マッチした文字列全体とキャプチャリングした文字列を取得するためのメソッドが RegExp.prototype.exec( string )
メソッドです。
このメソッドは、マッチングが成功した場合は Array
オブジェクトを返します。 その Array
オブジェクトの第 0 要素はマッチした部分文字列全体です。 正規表現にキャプチャリングが含まれていた場合は、Array
オブジェクトの第 1 要素以降に、順番にキャプチャリングされた文字列が格納されます。 さらに、この Array
オブジェクトには index
プロパティと input
プロパティが定義され、それぞれの値は、正規表現が文字列にマッチした開始位置とマッチングの対象になった文字列全体です。
また、RegExp
オブジェクトの global フラグが true
であるならば、マッチした部分の最後の文字の次の文字の位置が、RegExp
オブジェクトの lastIndex
プロパティに保持されます。 同じ RegExp
オブジェクトを使って再び exec
メソッドを実行すると、そのときのマッチングは lastIndex
プロパティの値から再開されます。 よって、while
ループでマッチしなくなるまで繰り返す、ということが可能です。
なお、マッチしなかった場合には exec
メソッドは null
を返します。
例
// global フラグを true にした RegExp オブジェクト var re = /<(\d+),(\d+)>/g; var m; // マッチする部分がある限り繰り返す while( m = ( re.exec( "ab<32,43>cddd<faa>da<342,2>bcaaeabc" ) ) ) { // マッチした部分の開始位置 print( m.index ); // マッチした部分文字列全体 (Ruby などでは $& で参照できる) print( m.shift() ); // (第 0 要素だけを取り出している) // キャプチャされた部分 (Ruby などでは $1, $2, ... で参照できる) print( m.join( ", " ) ); // (元々の第 0 要素は既に取り出したので, 残りはキャプチャされた部分のみ) }
JavaScript でも、バージョンによっては RegExp['$&']
としてマッチした部分文字列全体を参照したり RegExp.$1
, RegExp.$2
, ... としてキャプチャされた部分を参照できたりしましたが、非推奨となっており、使わないようにした方がいいでしょう。 (ちなみに RegExp.$&
は基本的に構文エラーになってしまうので、RegExp['$&']
と書く必要がある。)
参考文献
- ECMAScript - Documentation (ECMAScript の仕様書)
- RegExp - MDN Docs
- 取説 正規表現 (nanto_vi さん)