![1分でわかるJavaScript正規表現の肯定(否定)先読み/後読みの使い方](https://iwb.jp/wp-content/uploads/2018/08/javascript-regexp-lookahead-lookbehead.png)
肯定先読み (?=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'