JavaScriptの正規表現にある「先読み」と「否定先読み」
JavaScriptの正規表現にこんなのがあります。
123(?=456) // 先読み 123(?!456) // 否定先読み
先読み
これは123
の後に456
が続く場合・・・123456
の123
にマッチします。
'123456'.match(/123(?=456)/) // -> ["123"] '123'.match(/123(?=456)/) // -> null '1234'.match(/123(?=456)/) // -> null '1234567'.match(/123(?=456)/) // -> ["123"]
否定先読み
これは123
の後に456
が続かない場合・・・123
や1234
にマッチします。
'123456'.match(/123(?!456)/) // -> null '123'.match(/123(?!456)/) // -> ["123"] '1234'.match(/123(?!456)/) // -> ["123"] '1234567'.match(/123(?!456)/) // -> null
ちょっと普通の文字列で使ってみます。
'JavaScript'.match(/Java(?=Script)/) // -> ["Java"] 'JavaScript'.match(/Java(?!Script)/) // -> null
勘違いでした。
頭につけると意味が逆になるの?
'SCSS'.match(/(?=S)CSS/) // -> null 'SCSS'.match(/(?!S)CSS/) // -> ["CSS"]
前に「否定先読み」付けて、CSS
の前にS
が付いているのにマッチング。
こんなこともできるみたい。
'JavaScript'.match(/Java(?=Script)....../) // -> ["JavaScript"] 'SCSS'.match(/.(?!S)CSS/) // -> ["SCSS"]