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

时间:2015-02-20 15:58:45

标签: javascript regex

我试图让每次出现的字符(d)前面都没有其他几个字符(a,b或c)之一。下面的正则表达式可以工作并返回我想要的字符,但它也会返回它之前的字符(如空格或其他字符)。

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

您可以对其进行测试here

通常情况下我会使用负面的背后隐藏,但我在javascript中工作,这似乎是我需要的一个简单的解决方法。我知道有一些在JS中实现lookbehind的解决方法,但是我有兴趣理解为什么这个正则表达式的工作原理。

1 个答案:

答案 0 :(得分:1)

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

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

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

RegEx Demo