正規表現パターンマッチング
正規表現(RegExp)オブジェクト
RegExpオブジェクトの作り方は次の2通り
前者の特徴は
-
- プログラムに埋め込んで使う(静的)
- お手軽
後者の特徴は
-
- プログラム実行時に動的にRegExpオブジェクトを生成できる
- なんとなくめんどくさい
例によってそれぞれまとめ。
文字 | 意味 |
---|---|
[文字] | 角括弧内の任意の1文字。 |
[^文字] | 角括弧内の文字以外の任意の1文字。 |
. | Unicodeの行末文字(\n)以外の任意の1文字。[^\n]と同じ。 |
\w | 任意の単語文字(word character)1文字。[a-zA-Z0-9_]と同じ。 |
\W | ASCII文字での単語文字以外の1文字。[^a-zA-Z0-9_]と同じ。 |
\s | 任意のUnicode空白文字1文字。 |
\S | Unicode空白文字以外の1文字。 |
\d | 任意の数字1文字。[0-9]と同じ。 |
\D | 数字以外の1文字。[^0-9]と同じ。 |
-
- 繰り返し
文字 | 意味 |
---|---|
{n,m} | 直前の項目がn回からm回繰り返す文字列。 |
{n,} | 直前の項目がn回以上繰り返す文字列。 |
{n} | 直前の項目がn回繰り返す文字列。 |
? | 直前の項目が0回、または1回繰り返す文字列。{0,1}と同じ。 |
+ | 直前の項目を1回以上繰り返す。{1,}と同じ。 |
* | 直前の項目を1回以上繰り返す。{0,}と同じ。 |
-
- 非貪欲な繰り返し(JavaScript1.5以降)
繰り返し文字の後に「?」を付けると非貪欲な繰り返しになります。
※非貪欲とは必要最小限ということ
例)
/a.*b/ // 「aaabaab」の場合「aaabaab」が一致する。 /a.*?b/ // 「aaabaab」の場合「aaab」が一致する。
-
- 選択、グループ化、参照
文字 | 意味 | |
---|---|---|
\ | 選択(OR)。この記号の左右どちらかに一致する。 | |
(文字列) | グループ化。このグループに一致する文字を記憶する。 | |
(?:文字列) | グループ化のみ。このグループに一致する文字を記憶しない。 | |
\n | 左から数えてn番目のグループを指定。 |
例)
/cima|dai/ // 「cima」「dai」のいずれかに一致する。 /(miko)+nurse/ // 「mikonurse」「mikomikonurse」などに一致する。 /(miko)(nurse)\2/ // \2は「nurse」を表す。
-
- アンカー文字
文字 | 意味 |
---|---|
^ | 文字列の先頭。マルチライン検索では行の先頭。 |
$ | 文字列の末尾。マルチライン検索では行の最後。 |
\b | 単語境界。\w文字と\W文字 or \wと文字列の先頭または末尾の間の位置。 |
\B | 単語境界ではない位置。 |
(?=p) | 先読み言明。後に続く文字がパターンpに一致することが必要。パターンpに一致した部分の文字列は比較結果に含まれない。 |
(?!p) | 否定先読み言明。後に続く文字がパターンpに一致しないことが必要条件。 |
例)
/^cima/ // 「cimadai」の「cima」に一致する。 /dai$/ // 「cimadai」の「dai」に一致する。 /\bdai/ // 「cima dai」の「dai」に一致する。「cimadai」の「dai」には一致しない。 /\Bdai/ // 「cimadai」の「dai」に一致する。「cima dai」の「dai」には一致しない。 /cimadai(?=\:)/ // 「cimadai」の後に「:」が続いていれば一致する。 /cimadai(?!\:)/ // 「cimadai」の後に「:」が続いていなければ一致する。
-
- フラグ
文字 | 意味 |
---|---|
i | 大文字と小文字を区別しない。(ignoreCase) |
g | グローバル検索。最初に一致したものだけではなく、一致するものすべてを検索する。 |
m | マルチラインモードで検索する。 |
↓僕がテスト的に正規表現を試すのに書いたコード(HTMLごと)
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript" src="./jquery.js"></script> <title>demo</title> <script type="text/javascript"> function Reg(){ var strSrc = document.getElementById("src").value var objReg = new RegExp( document.getElementById("reg").value, "g" ); if( strSrc.match( objReg ) ){ $("#result").attr("value", strSrc.match( objReg ) ); }else{ $("#result").attr("value", "not found" ); } } </script> </head> <body> <table> <tr><td><input type="text" id="src" size="30" /></td></tr> <tr><td><input type="text" id="reg" size="30" /></td></tr> <tr><td><input type="button" value="チェック" onclick="Reg()"/></td></tr> <tr><td><input type="text" id="result" size="30" /></td></tr> </table> </body> </html>
正規表現って、、、面白っ!!!
正規表現使いこなしたらいろいろ夢が広がりそうですね\(^O^)/