javascript - JavaScript 中的负后视等价物

标签 javascript regex negative-lookbehind

有没有办法实现相当于 negative lookbehind 的效果?在 JavaScript 正则表达式中?我需要匹配不以特定字符集开头的字符串。

如果在字符串的开头找到匹配的部分,我似乎无法找到一个不会失败的正则表达式。负面回顾似乎是唯一的答案,但 JavaScript 没有。

这是我想要工作的正则表达式,但它没有:

(?<!([abcdefg]))m

所以它会匹配 'jim' 或 'm' 中的 'm',但不会匹配 'jam'

最佳答案

自 2018 年以来,Lookbehind AssertionsECMAScript language specification 的一部分.

// positive lookbehind
(?<=...)
// negative lookbehind
(?<!...)

2018 年之前的回答

由于 Javascript 支持 negative lookahead ,一种方法是:

  1. 反转输入字符串

  2. 与反向正则表达式匹配

  3. 反转并重新格式化匹配项


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/

相关文章:

python - 使用捕获组提取字符串(使用 re.match)

java - 为什么在定长的正则表达式后方这种负向查找不起作用?

javascript - 关于jquery slideDown的问题

javascript - 在单行而不是所有行上运行 jQuery 函数?

javascript - 类似 "DOMLastNodeRemoved"的事件可防止代码多次执行

javascript - TypeScript + Monaco 编辑器中的未知类型是什么?

php - preg_split 反斜杠

regex - 捕获每行的前 n 个字符

.net - 如果紧随其后的是特定字符,则正则表达式会丢弃整个捕获

javascript - 正则表达式匹配 domain.com 但不匹配 @domain.com