サイ本11章をざっくり読みました。流し読んだ感じでは、JavaScriptの正規表現はRubyやPerlとほぼ同じ仕様ですね。他言語との細かい違いはまた今度調べるとして、とりあえずJavaScriptの正規表現関連メソッドについてまとめたので載せときます。
基礎
正規表現はRegExpオブジェクトによって表現されます。作り方には、コンストラクタを使う方法と、正規表現リテラルを使う方法があります。
var a = new RegExp("hoge", "g"); // コンストラクタ var b = /hoge/g; // リテラル
Stringオブジェクトのメソッド
replace()
マッチしたものを第二引数で指定した文字列に置き換えます。第二引数に関数を指定して、置換文字列を動的に変更できるようです。
// 文字列の全ての単語の最初の文字列を大文字にする例 text.replace(/\b\w\b/g, function(word) { return word.substring(0, 1) .toUpperCase() + word.substring(1); });
match()
マッチした場合、マッチした結果を格納した配列を返します。RegExpオブジェクトにgフラグがあった場合は、マッチした全ての配列を返します。gフラグがなかった場合は、配列の0番目の要素に一致した文字列を格納し、次の要素からは括弧でくくられた部分の文字列を格納します。
split()
指定された引数を区切り文字として使用し、文字列を分割します。
RegExpオブジェクトのメソッド
exec()
マッチした場合は、配列を返します。配列は、matchでgフラグがなかったときの形式と同じです。RegExpオブジェクトにgフラグを設定した場合は、一致した文字列の直後の文字位置をlastIndexプロパティに格納します*1。この時にexec()メソッドを呼び出すと、lastIndexプロパティが示す文字位置から検索を開始します。なので、exec()メソッドでマッチした全ての配列を返すようにするにはループを使って複数回exec()メソッドを実行してあげる必要があります。
test()
マッチした場合にtrueを返す以外はexec()メソッドと同じです。
RegExpオブジェクトのプロパティ
sourceプロパティ
正規表現の本体である文字列が格納されているプロパティ。読み出し専用。
globalプロパティ
gフラグが設定されているかどうかが格納されているプロパティ。読み出し専用。
ignoreCaseプロパティ
iフラグが設定されているかどうかが格納されているプロパティ。読み出し専用。
multilineプロパティ
mフラグが設定されているかどうかが格納されているプロパティ。読み出し専用。
*1:一致した文字列がなければlastIndexは0になります