JavaScriptでの正規表現の話題です。
良くある、正規表現のための オブジェクト RegExp についてと、String(文字列の)正規表現関係の関数についてまとめてみました。
とりあえず、マイクロソフト版です。
まずはイントロ | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
正規検索は、RegExp オブジェクトのメソッドから、あるいは、String オブジェクトのメソッドから 利用できる。まず、最初に RegExp オブジェクトから見ていこう。 RegExp は JavaScript において特殊な位置にあり、「リテラル記述」ができる。 例えば次のように書く。 var e=/abc.d/i; /abc.d/が検索パターンで、i がオプション。このオブジェクトが e にセットされている。 通常のオブジェクトのように new を使って生成できる。 var e= new RegExp("abc.d","i"); | ||||||||||||||||||||||||||||||||||||||
RegExp のコンストラクタ | ||||||||||||||||||||||||||||||||||||||
上記のように二通りの書き方があるが、いずれも、パターンとフラグで構成されている。
たぶん仕様外」だろうが、次の書き方もできた。
許されるフラグは次の通り
| ||||||||||||||||||||||||||||||||||||||
ちょっと、インタールード | ||||||||||||||||||||||||||||||||||||||
RegExp は、オブジェクトのプロパティ/メソッドだけでなく、クラスのプロパティを持っています。クラスのプロパティは、オブジェクトごとに存在するオブジェクトのプロパティと異なり、プログラム中に一組しか存在しません。例えば、プロパティ index ならば、次のようにクラス名で修飾して参照します。 RegExp.index RegExp のメソッドや、String のメソッドで正規表現検索ををすると、部分文字列など、結果にまつわるこまごまとした情報がセットされるので、検索処理終了後に参照することができるので便利ですが、一組しか保持できないという使いにくさもあります。 | ||||||||||||||||||||||||||||||||||||||
RegExp のクラス・プロパティ | ||||||||||||||||||||||||||||||||||||||
検索結果を保持する、プログラム中に一組だけの情報です。
略記法による参照は、$1-$9 を除いて、文法的に許されない名称なので、文字列を使ったプロパティ参照を使用する。すなわち、 RegExp["$&"] のように書く。 | ||||||||||||||||||||||||||||||||||||||
RegExp のオブジェクト・プロパティ | ||||||||||||||||||||||||||||||||||||||
パターンに設定したのフラグをここで読み取ることができる 以下のプロパティはいずれも、読み取り専用となっている。
| ||||||||||||||||||||||||||||||||||||||
RegExp のオブジェクト・メソッド | ||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||
String で使える 正規表現メソッド | ||||||||||||||||||||||||||||||||||||||
文字列のオブジェクトには正規表現の検索、置換などのメソッドが用意されています。
|
ブログでもちょっと書いた簡単な機能テストをしました(ブラウザの違いを見たかったのです)。
処理 | あなたのブラウザでの結果 | perl (5.12) での結果 |
---|---|---|
"123456789".match(/()/g) | ,,,,,,,,, | |
"123456789".match(/(|\d)/g)) | ,1,,2,,3,,4,,5,,6,,7,,8,,9, | |
"123456789".match(/(\d|)/g)) | 1,2,3,4,5,6,7,8,9, |
処理 | あなたのブラウザでの結果 | IE8での結果 |
---|---|---|
"abc123def456hij".match("\\d+") | 123 | |
"abc123def456hij".replace(/\w(\d+)/g,"$1") | ab123de456hij | |
"abc123def456hij".replace(/\d+/g,dum) function dum(s) { var a=parseInt(s); return a+100; } |
abc223def556hij | |
"123456789".split("") | 1,2,3,4,5,6,7,8,9 |