今回は正規表現における「パターン」について見ていきましょう。
文字クラスやメタ文字など、すでに見てきたものですが、実際の書き方、動作を確認しながら学習してください。
一見、難しそうですが、実際にコードを書いみると理解しやすいと思います。
文字クラスのマッチ
文字クラスのマッチするパターンです。
途中のコードは省略しています。
文字列
let regexp = /abc/; abc abcde zxabc : true aac ac abddc : false
ドット
let regexp = /a.c/; abc adc aac zxabc :true ac abbc :false
[…]
let regexp = /a[bcd]e/; abe ace ade :true abce abcde : false
[0-9]
let regexp = /[0-9]/g; let test = 'abc4589def'; let test2 = test.match(regexp); console.log(test2); (4) ['4', '5', '8', '9']
[0123456789]と同じになります。
英数字にマッチするパターンとして良く使われるのが、[0-9a-zA-Z]という書き方です。
メタ文字
^
文字列の先頭にマッチします。
let regexp = /^abc/;
console.log(regexp.test('abcd'));
true
console.log(regexp.test('aabcde'));
false
$
文字列の最後にマッチします。
let regexp = /abc$/;
console.log(regexp.test('abcdef'));
false
console.log(regexp.test('xzabc'));
true
\b
単語の先頭、末尾にマッチします。
let regexp = /\babc/;
console.log(regexp.test('abcdef'));
true
console.log(regexp.test('xzabc'));
false
let regexp = /abc\b/;
console.log(regexp.test('abcdef'));
false
console.log(regexp.test('zxabc'));
true
\B
先頭と末尾以外にマッチします。
let regexp = /\Babc/;
console.log(regexp.test('zxabcdef'));
true
console.log(regexp.test('abcdef'));
false
let regexp = /abc\B/;
console.log(regexp.test('abcdef'));
true
console.log(regexp.test('zxabc'));
false
*
0回以上連続する場合にマッチします。
let regexp = /ab*c/;
console.log(regexp.test('ac'));
true
console.log(regexp.test('abc'));
true
console.log(regexp.test('abbc'));
true
+
1回以上連続する場合にマッチします。
let regexp = /ab+c/;
console.log(regexp.test('ac'));
false
console.log(regexp.test('abc'));
true
console.log(regexp.test('abbc'));
true
?
0回、または1回の場合マッチします。
let regexp = /ab?c/;
console.log(regexp.test('ac'));
console.log(regexp.test('abc'));
true
true
console.log(regexp.test('abbc'));
false
{num}
指定した回数繰り返した場合マッチします。
let regexp = /ab{2}c/;
console.log(regexp.test('ac'));
console.log(regexp.test('abc'));
false
false
console.log(regexp.test('abbc'));
true
{num,}
指定回数以上の場合マッチします。
let regexp = /ab{2,}c/;
console.log(regexp.test('abc'));
console.log(regexp.test('abbc'));
console.log(regexp.test('abbbbc'));
false
true
true
{min,max}
何回以上何回以下の場合マッチします。
let regexp = /ab{2,4}c/;
console.log(regexp.test('abc'));
console.log(regexp.test('abbbbc'));
console.log(regexp.test('abbbbbc'));
false
true
false
組み合わせ
let regexp = /[0-9]{3}-[0-9]{4}-[0-9]{4}/;
console.log(regexp.test('090-1234-5678'));
console.log(regexp.test('03-1234-5678'));
true
false
量指定子
let regexp = /a.*c/; let gree = 'abbccdefgjiaggjfirkccfkgi'; let greed = gree.match(regexp); console.log(greed[0]); abbccdefgjiaggjfirkcc
量指定子は、デフォルトでは、より多くの文字列にマッチします。
ここでは「abbcc」ではなく、「abbccdefgjiaggjfirkcc」を取得しています。
let regexp = /a.*?c/; let gree = 'abbccdefgjiaggjfirkccfkgi'; let greed = gree.match(regexp); console.log(greed[0]); abbc
最小のマッチを取得するには、「?」を記述します。
いずれかにマッチ
let regexp = /tennis|swimming|football/;
console.log(regexp.test('football'));
console.log(regexp.test('tennis'));
console.log(regexp.test('baseball'));
true
true
false
先読みと後読み
先読み(肯定)
let money = ' I have 3 coins and 10€.'; let sample = money.match(/\d+(?=€)/); console.log(sample[0]); 10
X(?=Y)で記述します。
先読み(否定)
let money = ' I have 3 coins and 10€.'; let sample = money.match(/\d+(?!€)/); console.log(sample[0]); 3
X(?!Y)で記述します。
後読み(肯定)
let money = ' I have 3 coins and €100.'; let sample = money.match(/(?<=€)\d+/); console.log(sample[0]); 100
(?<=Y)Xで記述します。
後読み否定
let money = ' I have 3 coins and €100.'; let sample = money.match(/(?<!€)\d+/); console.log(sample[0]); 3
(?<!Y)Xで記述します。
あとがき
もの凄くシンプルですが、正規表現のパターンについてご紹介させて頂きました。
あとは、実際のコードを書きながら覚えて行くのが良いと思います。
今回も最後までお読み頂きありがとうございました。


