【JavaScript】正規表現

正規表現とは

正規表現をつかうと文字列を抽象的に扱うことができます。「○○の日記」といった異なる文字列を「<半角英数文字>の日記」のように1つの形式で表現できます。

メタ文字

メタ文字には次のようなものがあり、それぞれ特殊な意味を持っています。

メタ文字 意味
. 任意の1文字(改行を除く)
* 0回以上の繰り返し
+ 11回以上の繰り返し
? 0回または1回の繰り返し
^ 先頭
$ 末尾
() 正規表現のクラス
[ ] 文字クラス
{n} n回の繰り返し
{n,} n回以上の繰り返し
{n,m} n回以上m以下の繰り返し
\ メタ文字を文字として扱う

文字クラス

複数の文字を集めたものを文字クラスといいます。
文字クラスは[ ]で挟んで記述し、挟んだ文字の中のどれか1文字を表します。
文字クラスの先頭に「^」をつけると、文字クラスの否定を表します。

[2,4,6,8]
2,4,6,8のどれか1文字

[^2,4,6]
2,4,6以外の1文字

[0-9] = [0123456789]


文字クラスには、あらかじめ用意されている特殊文字を使って表現することもできます。

特殊文字 文字クラスの表記 意味
\w [0-9a-zA-Z_] 半角英数文字とアンダーバー
\W [0-9a-zA-Z_] 半角英数文字とアンダーバー以外
\s [\t\n\r\f] 空白(半角スペース、タブ、改行)
\S [\t\n\r\f] 空白(半角スペース、タブ、改行)以外
\d [0-9] 数字
\D [0-9] 数字以外

RegExpオブジェクト

正規表現パターンマッチを行うには、RegExpオブジェクトを使います。

<例題>「I like sushi and curry」から小文字アルファベットで5文字の文字列を抽出します。

//変数の宣言
str = "I like sushi"

//小文字アルファベットで5文字の文字列のパターンオブジェクトを作成
reg = new RegExp("[a-z]{5}");

//match()メソッドを使い、パターンマッチした文字列を含む配列を返します。
mat = str.match(reg);
<h2>RegExp</h2>
<script type="text/javascript">
document.write(mat);
</script>


大文字と小文字を区別しないときは、オプションのiフラグを使います。

str = "I like sushi and curry";
reg = new RegExp("[A-Z]{5}","i");
mat = str.match(reg);


マッチした文字列をすべて取得するには、オプションのgフラグを使います。
取得した文字列は配列で返されます。

str = "I like sushi and curry";
reg = new RegExp("[a-z]{5}","g");
mat = str.match(reg);

文字列を置換する

文字列を置換するには、replace()メソッドを使います。

str = "I like sushi";
//置換後の文字列
rep = "curry"
reg = new RegExp("[a-z]{5}","g");
//replace()メソッドを使って文字列を置換
mat = str.replace(reg,rep);