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