为什么这个正则表达式返回前面的字符

Why does this regular expression return the preceding character?

本文关键字:前面 字符 返回 正则表达式 为什么      更新时间:2024-03-06

我正在尝试获取一个字符(d)的每一个出现,该字符前面没有其他几个字符(a、b或c)中的一个。下面的正则表达式可以工作并返回我想要的字符,但它也会返回紧挨在它前面的字符(如空格或其他字符)。

var rgx = /(?:[^abc])d/
var string = 'abcd d de cd ad da bd'

你可以在这里测试。

通常情况下,我会使用否定的查找,但我使用的是javascript,这似乎是一个简单的解决方法。我知道在JS中实现lookbacking有一些变通方法,但我有兴趣理解为什么这个正则表达式会这样工作。

您需要使用两个不同的捕获组:

var rgx = /(?:^|[^abc])(d)/;

在Javascript正则表达式引擎中没有查找功能的情况下,将前面的字符从匹配中单独获取。

RegEx演示