RegExp 正規表現
JavaScripで正規表現を使用方法です。
基本的な使い方
正規表現の宣言
リテラルで書く方法とRegExpを使った方法がある。
let reg1 = /xx*y/i;
let reg2 = new RegExp(/xx*y/, 'i');
let reg3 = new RegExp('xx*y', 'i');
リテラル表記にある2つ目のスラッシュの後の文字、 あるいはRegExpの第2引数は正規表現の振る舞いを変更するフラグです。 以下文字の組み合わせを指定できる。
フラグ | 説明 |
---|---|
g | 全てのマッチする対象を検索 |
i | 大文字小文字を区別しない |
m | 行単位でのマッチを行う |
s | 改行文字に. がマッチ |
u | Unicodコードポイント |
y | 先頭固定 |
文字列のマッチ判定 test
const reg = /^\d\d\d\d-\d\d-\d\d$/;
console.log(reg.test('2020-01-01')); // true
console.log(reg.test('2020-3-5')); // false
gと組み合わせて複数回の繰り返しが可能。
const reg = /xy*/g;
const str = 'aaxabdabxyya';
console.log(reg.lastIndex); // 0
console.log(reg.test(str)); // true
console.log(reg.lastIndex); // 3
console.log(reg.test(str)); // true
console.log(reg.lastIndex); // 11
console.log(reg.test(str)); // false
console.log(reg.lastIndex); // 0
置換 replace
const reg = /(\d+)-(\d+)-(\d+)/;
const str = '日付は2012-02-20です';
console.log(str.replace(reg, '$1年$2月$3日')); // "日付は2012年02月20日です"
マッチ結果の取得 exec
const reg = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
const result = reg.exec('2020-01-01');
console.log(result[0]); // 元の文字
console.log(result[1]); // 最初のマッチ
console.log(result[2]); // 2つ目のマッチ
console.log(result[3]); // 3つ目のマッチ
console.log(result.index); // マッチ位置の先頭
console.log(result.input); // 入力文字列
const reg = /\w+/g;
let result = null;
while ((result = reg.exec('dog cat mouse')) !== null) {
console.log(`${result[0]}, ${result.index}, ${result.input}`);
//"dog, 0, dog cat mouse"
//"cat, 4, dog cat mouse"
//"mouse, 8, dog cat mouse"
}