JS 正規表現における様々なパターン 文字クラス メタ文字 先読みと後読み

JS 正規表現のパターン Java Script
スポンサーリンク

今回は正規表現における「パターン」について見ていきましょう。

文字クラスやメタ文字など、すでに見てきたものですが、実際の書き方、動作を確認しながら学習してください。

一見、難しそうですが、実際にコードを書いみると理解しやすいと思います。

スポンサーリンク

文字クラスのマッチ

文字クラスのマッチするパターンです。

途中のコードは省略しています。

文字列

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で記述します。

あとがき

もの凄くシンプルですが、正規表現のパターンについてご紹介させて頂きました。

あとは、実際のコードを書きながら覚えて行くのが良いと思います。

今回も最後までお読み頂きありがとうございました。

タイトルとURLをコピーしました