有没有办法实现相当于 negative lookbehind 的效果?在 JavaScript 正则表达式中?我需要匹配不以特定字符集开头的字符串。
如果在字符串的开头找到匹配的部分,我似乎无法找到一个不会失败的正则表达式。负面回顾似乎是唯一的答案,但 JavaScript 没有。
这是我想要工作的正则表达式,但它没有:
(?<!([abcdefg]))m
所以它会匹配 'jim' 或 'm' 中的 'm',但不会匹配 'jam'
最佳答案
自 2018 年以来,Lookbehind Assertions是 ECMAScript language specification 的一部分.
// positive lookbehind
(?<=...)
// negative lookbehind
(?<!...)
2018 年之前的回答
由于 Javascript 支持 negative lookahead ,一种方法是:
反转输入字符串
与反向正则表达式匹配
反转并重新格式化匹配项
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
, token 是height
):
test(['max-height', 'line-height'], /thgieh(?!(-enil))/)
输出:
max-height true token: height
line-height false token: Ø
关于javascript - JavaScript 中的负后视等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641407/