1分でわかるJavaScript正規表現の肯定(否定)先読み/後読みの使い方

肯定先読み (?=bar)

肯定先読みは(?=bar)の形式を先に覚える。

var str1 = 'foobar';
var str2 = 'foobaz';

console.log(/foo(?=bar)/.test(str1));
// => true

console.log(/foo(?=bar)/.test(str2));
// => false

否定先読み (?!bar)

否定先読みは否定のため=が!になると覚える。

var str1 = 'foobar';
var str2 = 'foobaz';

console.log(/foo(?!bar)/.test(str1));
// => false

console.log(/foo(?!bar)/.test(str2));
// => true

肯定後読み (?<=foo)

肯定先読みが右にあったのが肯定後読みだと左に記述するため、?=の真ん中に<を入れて?<=となると考えるとわかりやすい。

var str1 = 'foobar';
var str2 = 'foobaz';

console.log(/(?<=foo)bar/.test(str1));
// => true

console.log(/(?<=foo)bar/.test(str2));
// => false

否定後読み (?<!foo)

肯定後読みの?<=が否定のため?<!になると覚える。

var str1 = 'foobar';
var str2 = 'foobaz';

console.log(/(?<!foo)bar/.test(str1));
// => false

console.log(/(?<!bar)baz/.test(str2));
// => true

$1での置換はできない

以下のように(?=bar)を$1で置換することはできない。

var str = 'foobar';
console.log(str.replace(/foo(?=bar)/, 'test $1'));
// => 'test $1bar'