「JavaScript/RegExp」の版間の差分
削除された内容 追加された内容
JavaScript/標準ライブラリ/RegExp 12:05, 7 August 2015 UTC を転記 |
Naggy Nagumo (トーク | 投稿記録) syntaxhighlight |
||
11 行
次にHTMLの要素名を取得する例を示す。要素名は"<"の文字に続く英数字である。これを正規表現で検索するには、以下のように記述する。
<syntaxhighlight lang="JavaScript">
/<[a-zA-Z0-9]+/
</syntaxhighlight>
これでHTMLの要素名を取得するには完全ではないのだが、とりあえずその点を飛ばして解説をする。
JavaScriptでは、正規表現をスラッシュ"/"の間に記述をする。
19 ⟶ 20行目:
スラッシュで囲う表記法はJavaScriptで用意されているシンタックスシュガーで、実際には次の2つは意味的に等価である。
<syntaxhighlight lang="JavaScript">
var regexp = new RegExp( "ab" );
var regexp = /ab/; </nowiki>
</syntaxhighlight>
=== 正規表現の作り方 ===
30 ⟶ 32行目:
==== クエスチョン『?』 ====
直前の文字が存在しなくてもいいような場合を表す。
<syntaxhighlight lang="JavaScript">
/html?
</syntaxhighlight>
はhtmlとhtmいずれにもマッチする。
==== アスタリスク『*』 ====
直前の文字を0回以上繰り返した文字列を表す。
"<code>Yaho*</code>"と表記すると、"Yahoo"や"Yahooooooo"、"Yah"にマッチする。
==== プラス『+』 ====
直前の文字を1回以上繰り返した文字列を返す。
「<code>Go+gle</code>」と表記すると"Google"、"Goooooogle"でもマッチするが"Ggle"ではマッチしない点がアスタリスクでの表記と異なる。
==== 中括弧『{n}』 ====
47 ⟶ 50行目:
例を挙げる。次の例は"Google"や"Goooooogle"にはマッチするが、"Gogle"にはマッチしない。
<syntaxhighlight lang="JavaScript">
/Go{2,}gle/;
</syntaxhighlight>
"*","+","?","{n}","{n,}","{n,m}"等の文字のマッチ回数を表す文字を量指定子と言う。
66 ⟶ 70行目:
==== 括弧『(?:)』 ====
括弧の中の文字列を表す。フェンスと組み合わせて次のように使用できる。
<syntaxhighlight lang="JavaScript">
/(?:りんご|ゴリラ|ラッパ)
</syntaxhighlight>
==== 括弧『()』 ====
75 ⟶ 80行目:
囲った範囲の文字のいずれか1文字を表す。
つまり次の2文は同じ意味を持つ。
<syntaxhighlight lang="JavaScript">
/(?:0|1|2|3|4|5|6|7|8|9)/;
/[0123456789]/;
</syntaxhighlight>
==== ブラケット『[A-Z]』 ====
A~Zまでの文字列のいずれかを表す。
同様に
ちなみに、ブラケットとハイフンの組み合わせは複数記述できるため、
==== 否定演算子『^』 ====
ブラケットの中で使用し、指定した文字以外を意味する。
==== 半角スペース『 』 ====
93 ⟶ 99行目:
==== バックスラッシュ『\』 ====
直後の1文字の特殊文字をエスケープする。
==== その他の特殊文字 ====
147 ⟶ 153行目:
\b,\B のみ新しい概念なので解説する。
<syntaxhighlight lang="JavaScript">
/alpha\b/;
</syntaxhighlight>
の場合、"alpha beta"にはマッチするが、"alphabet"にはマッチしない。
157 ⟶ 164行目:
全てにマッチするには、正規表現のオプションを利用して次のように表記する。
<syntaxhighlight lang="JavaScript">
/ab/g
</syntaxhighlight>
最後についているgがオプションで、globalを表す。実行結果は次のようになる。
<syntaxhighlight lang="JavaScript">
var s = "abrakadabra";
s = s.replace( /ab/g, '**' ); // **rakad**ra
</syntaxhighlight>
その他にも、さまざまなオプションが存在する。組み合わせて利用する場合には連続して記述をすればよい。
<syntaxhighlight lang="JavaScript">
/ab/g;
/ab/igm; // i,g,mの3オプション
new RegExp( "ab", "i" );
new RegExp( "ab", "gm" );
</syntaxhighlight>
それぞれのオプションの意味は次の通りである。
{| class="wikitable"
|-
! オプション
! 説明
199 ⟶ 209行目:
マッチした文字列は保存され、後に取得が可能である。
<syntaxhighlight lang="JavaScript">
// HTML中のタグを取得する
var s="bbb<em>aaaa</em>ccc";
var m = s.match(/<.+?>(.*?)<\/.+?>/);
m[0]; // <em>aaaa</em> が返る。
m[1]; // aaaa が返る。
</syntaxhighlight>
1、2、3とマッチした文字列が括弧の順に格納されている。
210 ⟶ 221行目:
後方参照の必要がない場合には、括弧の内部に"?:"を挿入して次の様に記述する。
<syntaxhighlight lang="JavaScript">
/(?:abc)+/;
</syntaxhighlight>
==== $1~$9 ====
正規表現を実行して、マッチした結果を返す。
<syntaxhighlight lang="JavaScript">
// i,b,big等のタグをemタグへ変換する
s.replace( /(<\/?)(?:i|b|s|small|strike|big|tt)/i, '$1em' ); // $1で参照結果("<"か"</")を呼び出し
</syntaxhighlight>
=== 先読み ===
238 ⟶ 251行目:
==== source ====
与えられた正規表現を返す。
<syntaxhighlight lang="JavaScript">
console.log( new RegExp( "<.+?>", "gim" ).source ); // 『<.+?>』が表示される
</syntaxhighlight>
==== global ====
正規表現にglobalオプション("g"のこと)が付いているかを返す。
<syntaxhighlight lang="JavaScript">
(/ab/g).global; // trueが返る
(/ab/).global; // falseが返る
var rx = /ab/;
rx.global = true; // このようにしても値の設定は出来ないので注意
</syntaxhighlight>
==== ignoreCase ====
正規表現にignoreCaseオプション("i"のこと)が付いているかを返す。
<syntaxhighlight lang="JavaScript">
(/ab/ig).ignoreCase; // trueが返る
</syntaxhighlight>
==== multiline ====
正規表現にmultilineオプション("m"のこと)が付いているかを返す。
<syntaxhighlight lang="JavaScript">
(/ab/im).multiline; // trueが返る
</syntaxhighlight>
==== lastIndex ====
文字列中で正規表現に最後にマッチした位置を返す。
<syntaxhighlight lang="JavaScript">
var rx=/br/g;
rx.test("abracadabra");
270 ⟶ 287行目:
var rx=/br/g;
rx.lastIndex = 10;
rx.test("abracadabra"); // 11文字中、10文字目からの検索のため結果はマッチせずfalseが返る
</syntaxhighlight>
=== メソッド ===
280 ⟶ 298行目:
次の2文の場合は等価である。
<syntaxhighlight lang="JavaScript">
// var s = "abracadabra"; が既に宣言されている
var m = s.match(/ab/g);
var m = (/ab/g).exec(s);
</syntaxhighlight>
==== test(string) ====
指定された正規表現を実行して、マッチする文字があったかどうかを真偽値型で返す。
<syntaxhighlight lang="JavaScript">
var s="abracadabra";
if( (/ab/g).test( s ) ){
// ここから実際の処理
}
</syntaxhighlight>
==== toString() ====
作成した正規表現をオプション付きで返す。
<syntaxhighlight lang="JavaScript">
console.log( new RegExp( "ab", "g" ).toString() ); // 「/ab/g」が表示される
</syntaxhighlight>
[[Category:JavaScript]]
|