職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

JS--パターンのフラグ

2024年05月02日 | JavaScript
正規表現で設定できるフラグの一覧
【開発環境】
OS:Win11(64ビット)
VSCode1.72.2、
クロム
 
【ジャバスクリプトの正規表現で利用できるフラグ】

【正規表現オブジェクトへのフラグの設定方法】
フラグは正規表現オブジェクトを作成するときに設定します。正規表現リテラルの場合は次のように記述します。

/パターン/フラグ

フラグにはひとつまたは複数のフラグを表す文字を指定します。
let regexp1 = /.*/i;
let regexp2 = /.*/ig;
RegExp コンストラクタを使用する場合は次のように記述します。

new RegExp(パターン, フラグ) フラグにはひとつまたは複数のフラグを表す文字を指定します。

let regexp1 = new RegExp(/.*/, 'i');
let regexp2 = new RegExp(/.*/, 'ig');

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JS--パターンの先読み・後読み

2024年05月02日 | JavaScript

先読みと後読みを使ったパターンの記述

【開発環境】
OS:Win11(64ビット)
VSCode1.72.2、
クロム

【正規表現における先読みと後読みとは】
先読み(肯定先読み、否定先読み)と後読み(肯定後読み、否定後読み)の書式は次の通りです。

パターンA(?=パターンB)     肯定先読み
パターンA(?!パターンB)     否定先読み
(?<=パターンB)パターンA    肯定後読み
(?<!パターンB)パターンA    否定後読み

先読みの場合→パターン A の直後にパターン B が続く場合(または続かない場合)にマッチする。
後読みの場合→ パターン A の直前にパターン B がある場合(またはない場合)にマッチします。
どちらもパターン B も含めてマッチするかどうか判断しますが、マッチした文字列として取得するのはパターン A にマッチした部分だけです。

【肯定の先読み】

肯定の先読みは、対象の文字列がパターン A の直後にパターン B に続く場合にマッチします。この時、マッチした値としてはパターン A にマッチした部分だけを取得します。

パターンA(?=パターンB)     肯定先読み

サンプル

let regexp = /smart(?=phone)/;
console.log(regexp.test('smart'));
>> false
console.log(regexp.test('smartphone'));
>> true
console.log(regexp.test('smartwatch'));
>> false

let result = regexp.exec('smartphone');
console.log(result[0]);
>> smart

smart のあとに phone が続く場合のみマッチします。 smartphone はマッチしますが、 smart や smartwatch はマッチしません。そしてマッチした文字列として取得するのは smart のみです

【否定の先読み】
否定の先読みは、対象の文字列がパターン A の直後にパターン B が続かない場合にマッチします。この時、マッチした値としてはパターン A にマッチした部分だけを取得します。

パターンA(?!パターンB) 否定先読み

サンプル

let regexp = /smart(?!phone)/;

console.log(regexp.test('smart'));
>> true
console.log(regexp.test('smartphone'));
>> false
console.log(regexp.test('smartwatch'));
>> true

let result = regexp.exec('smartwatch');
console.log(result[0]);
>> smart

smart のあとに phone が続かない場合のみマッチします。 smartphone にはマッチしませんが、 smart や smartwatch はマッチします。そしてマッチした文字列として取得するのは smart のみです。

【肯定の後読み】
肯定の後読みは、対象の文字列がパターン A の前にパターン B がある場合にマッチします。この時、マッチした値としてはパターン A にマッチした部分だけを取得します。

(?<=パターンB)パターンA    肯定後読み

例えば次のパターンで考えてみます。

const regexp = /(?<=digital)camera/;

camera の直前に digital がある場合のみマッチします。 digitalcamera はマッチしますが、 camera や analogcamera はマッチしません。そしてマッチした文字列として取得するのは camera のみです。

サンプルコード

簡単なサンプルで試してみます。

let regexp = /(?<=digital)camera/;

console.log(regexp.test('camera'));
>> false
console.log(regexp.test('digitalcamera'));
>> true
console.log(regexp.test('analogcamera'));
>> false
//マッチした文字列を取得
let result = regexp.exec('digitalcamera');
console.log(result[0]);
>> camera

【否定の後読み】
否定の後読みは、対象の文字列がパターン A の前にパターン B がない場合にマッチします。この時、マッチした値としてはパターン A にマッチした部分だけを取得します。

(?<!パターンB)パターンA    否定後読み

例えば次のパターンで考えてみます。

const regexp = /(?<!digital)camera/;

camera の直前に digital がない場合のみマッチします。 digitalcamera にはマッチしませんが、 camera や analogcamera はマッチします。そしてマッチした文字列として取得するのは camera のみです。

サンプルコード
let regexp = /(?<!digital)camera/;

console.log(regexp.test('camera'));
>> true
console.log(regexp.test('digitalcamera'));
>> false
console.log(regexp.test('analogcamera'));
>> true

let result = regexp.exec('analogcamera');
console.log(result[0]);
>> camera
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする