JavaScript RegExp クラス
RegExp オブジェクトの作成
JavaScript の正規表現は RegExp オブジェクトで表されます。
RegExp(pattern [, flags] ) コンストラクタは正規表現のパターンとフラグを受け取り、RegExp オブジェクトを作成します。
const r = new RegExp('\\d+')
console.log(r.test('A123 XYZ')) // true
new RegExp() で RegExp オブジェクトを作成する箇所は / でパターンを囲むことで簡単に記述できます。
const r = /\d+/
RegExp コンストラクタに渡す文字列中では、バックスラッシュはエスケープが必要です。
RegExp() コンストラクタの第二引数に渡すフラグは文字列で指定します。一度に複数指定することも可能です。
const r = new RegExp('java', 'gi')
for (let m of 'Java Python javascript'.matchAll(r)) {
console.log(`${m.index} : ${m[0]}`)
}
// 0 : Java
// 12 : java
/ を使って RegExp オブジェクトを作成するときは、フラグは後ろの / に続けて記載します。
const r = /java/gi
test() 文字列がパターンにマッチするか判定
RegExp オブジェクトの test() メソッドは引数に文字列を受け取り、 引数の文字列がパターンにマッチすれば true を、マッチしなければ false を返します。
const r = /\d+/
console.log(r.test('A123 XYZ')) // true
exec() パターンマッチングを実施
RegExp オブジェクトの exec() メソッドは引数に文字列を受け取り、 引数の文字列がパターンにマッチすればマッチの結果を返し、マッチしなければ null を返します。
マッチの結果は配列であり、要素 0 にマッチした箇所がセットされます。
また、 g フラグまたは y フラグでステートフルなパターンマッチングを行います。 RegExp オブジェクトの lastIndex プロパティにセットされた場所からパターンマッチを実施し、マッチすれば lastIndex をマッチした末尾にセットします。
const r = /\d{1,4}/g
const s = 'AB123X98'
let i = 1
let m = r.exec(s)
while (m) {
console.log(`${i++}: ${m[0]} (${r.lastIndex})`)
m = r.exec(s)
}
// 1: 123 (5)
// 2: 98 (8)
これにより、テストする文字列を先頭から順番にマッチを実施できます。