同等のものを達成する方法はあるか?否定的な後読みJavaScript 正規表現では、特定の文字セットで始まらない文字列を一致させる必要があります。
一致した部分が文字列の先頭にある場合に失敗せずにこれを実行する正規表現を見つけることができないようです。否定的な後読みが唯一の答えのようですが、JavaScript にはそれがありません。
これは私が動作させたい正規表現ですが、動作しません:
(?<!([abcdefg]))m
つまり、「jim」や「m」の「m」には一致しますが、「jam」には一致しません。
ベストアンサー1
2018年以来、後読みアサーションの一部であるECMAScript 言語仕様。
// positive lookbehind
(?<=...)
// negative lookbehind
(?<!...)
2018年以前の回答
Javascriptがサポートしている否定先読みこれを行う方法の 1 つは次のとおりです。
入力文字列を反転する
逆順の正規表現と一致する
一致を逆にして再フォーマットする
const reverse = s => s.split('').reverse().join('');
const test = (stringToTests, reversedRegexp) => stringToTests
.map(reverse)
.forEach((s,i) => {
const match = reversedRegexp.test(s);
console.log(stringToTests[i], match, 'token:', match ? reverse(reversedRegexp.exec(s)[0]) : 'Ø');
});
例1:
@andrew-ensley さんの質問に続きます:
test(['jim', 'm', 'jam'], /m(?!([abcdefg]))/)
出力:
jim true token: m
m true token: m
jam false token: Ø
例2:
次の @neaumusic のコメント ( に一致しますmax-height
が ではなくline-height
、トークンは ですheight
):
test(['max-height', 'line-height'], /thgieh(?!(-enil))/)
出力:
max-height true token: height
line-height false token: Ø