execメソッド
変数1 = /正規表現のパターン/; 変数 = 変数1.exec (文字列); |
- 正規表現のパターンで文字列を検索します。
- 一致した場合、一致した値を配列で返します。
- 配列のインデックスの0にマッチした該当の文字が入ります。
- 一致しなかった場合、nullを返します。
- gオプションを付けたときの挙動がStringオブジェクトのmatchメソッドと違います。(「文字を範囲で指定」を参照)
- RegExpオブジェクトのメソッドです。
特定のパターンが存在するか確認するだけであればexecメソッドではなく真偽値を返すtestメソッドまたはインデックス値を返すsearchメソッドの方が実行速度が早くなります。
文字列を指定
<script>
const a = /BC/;
const b = a.exec("ABC");
console.log(b);//["BC", index: 1, input: "ABC", groups: undefined]
console.log(b[0]);//BC
</script>
2行目は、文字列「BC」を指定しています。
execメソッドは5行目のように値を配列で返します。
6行目は、インデックスを指定して値を取得しています。
orを指定([])
<script>
const a = /[AE]/;
const b = a.exec("ABC");
console.log(b[0]);//A
</script>
2行目は、「A」または「E」を指定しています。
否定(^)
<script>
const a = /[^A]/;
const b = a.exec("ZZZ");
console.log(b[0]);//Z
</script>
2行目は、「A」以外の文字を指定しています。
文字の範囲(-)
<script>
const a = /[A-C]/;
const b = a.exec("ZZC");
console.log(b[0]);//C
const c = /[A-C]/g;
const d = c.exec("ABGC");
console.log(d);//["A", index: 0, input: "ABGC", groups: undefined]
</script>
2行目は、「A」または「B」または「C」の文字を指定しています。
7行目は、オプションのg(全て)を指定していますが配列でAのみを取得します。
matchメソッドでは、配列で["A", "B", "C"]を取得します。
先頭の文字列(^)
<script>
const a = /^AB/;
const b = a.exec("ABC");
console.log(b[0]);//AB
</script>
2行目は、先頭が「AB」の文字を指定しています。
末尾の文字列($)
<script>
const a = /BC$/;
const b = a.exec("ABC");
console.log(b[0]);//BC
</script>
2行目は、末尾が「BC」の文字を指定しています。
連続する文字{数値}
<script>
const a = /c{2}/;
const b = a.exec("acccb");
console.log(b[0]);//cc
</script>
2行目は、「c」が2回連続する文字を指定しています。
1桁以上{1,}
<script>
const ptr = /[0-9]{1,}-/;
const b = ptr.exec("1-");
const c = ptr.exec("123-");
const d = ptr.exec("ab1-");
const e = ptr.exec("a1b-");
console.log(b[0]);// 1-
console.log(c[0]); // 123-
console.log(d[0]); // 1-
console.log(e); // null
</script>
2行目は、数値1桁以上とハイフン(-)を指定しています。
数値(0-9)の5桁+先頭と末尾も(0-9)
<script>
const a = /^[0-9]{5}$/;
const b = a.exec("12345");
const c = a.exec("a2345");
const d = a.exec("123456");
console.log(b[0]);//12345
console.log(c); // null 文字あり マッチしない
console.log(d); // null 5桁でない マッチしない
</script>
数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)
<script>
const a = /^[0-9a-f]{5}$/;
const b = a.exec("1a23b");
const c = a.exec("a1bc");
const d = a.exec("12345");
const e = a.exec("abcde");
console.log(b[0]);//1a23b
console.log(c); // null マッチしない
console.log(d[0]); // 12345 数値のみ
console.log(e[0]); // abcde 英字のみ
</script>
郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)
<script>
const ptr = /^[0-9]{3}-[0-9]{4}$/;
//const ptr = /^\d{3}-\d{4}$/;
const b = ptr.exec("123-4567");
const c = ptr.exec("1234567");
const d = ptr.exec("1234-567");
console.log(b[0]);//123-4567
console.log(c);//null マッチしない
console.log(d);//null マッチしない
</script>
2行目と3行目は同じ意味です。\dは、数値を意味します。[0-9]と同じです。
ドット(.)を文字として指定(エスケープ)
<script>
const ptr = /a\./;
const b = ptr.exec("a.");
const c = ptr.exec("aa");
console.log(b[0]);//a.
console.log(c);//null マッチしない
</script>
2行目は、ドット(.)を文字として扱います。「a.」を指定しています。
エスケープとしてバックスラッシュ(ユニコードのU+005C)を前につけます。環境によっては円マークで表示されます。
ドット(.)にエスケープをつけない場合は任意の一文字という意味になります。
以下はMDNのexecメソッドのリンクです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
正規表現の構文とオプション
正規表現の構文として以下2つがあります。
変数 = /正規表現のパターン/オプション |
変数 = new RegExp('正規表現のパターン','オプション') |
1つめは、正規表現リテラルです。
2つめは、RegExpオブジェクトのコンストラクタです。
主なオプション
オプション | 説明 |
---|---|
g | マッチしたものをすべて返す(Global search.) |
i | 大文字と小文字の区別をしない(Case-insensitive search.) |
m | 複数行をマッチする |
正規表現のパターン
関連の記事
JavaScript search 正規表現でインデックス値を返す
JavaScript test 正規表現で真偽値を返す