Javascript 匹配字符串,除非它位于方括号内

Javascript 匹配字符串,除非它位于方括号内,javascript,regex,lookahead,Javascript,Regex,Lookahead,我正在尝试将我找到的JQuery zen编码插件应用于我自己的用途。我遇到的一个问题是代码中有一个bug a[href="google.com"] <a href="google.com" class="com"</a> 将扩展到 <a href="google.com" class="com"</a> 我对其进行了修改,并对其进行了展望,以查看其前面是否有偶数个括号 <a href="google.com" class="com"</

我正在尝试将我找到的JQuery zen编码插件应用于我自己的用途。我遇到的一个问题是代码中有一个bug

a[href="google.com"]
 <a href="google.com" class="com"</a>
将扩展到

 <a href="google.com" class="com"</a>
我对其进行了修改,并对其进行了展望,以查看其前面是否有偶数个括号

 <a href="google.com" class="com"</a>
/(\.[\w-]+)(?=([^\]]*\][^\]]*\])*[^\]]*$)/gi
我使用过regex测试程序,它似乎可以工作,但是当使用javascript
.match()
时,它会在上面的字符串中返回“.com”作为匹配项

 <a href="google.com" class="com"</a>
下面的响应解决了问题中的bug,但创建了一个新的bug。现在:

 <a href="google.com" class="com"</a>
a.class[href="google.com"]
他没有决心

 <a href="google.com" class="com"</a>

 <a href="google.com" class="com"</a>
编辑:
我接受了下面的答案,因为它让我找到了我需要去的地方。最后一个正则表达式是
/(\.[\w-]+)(?=([^\]*\][^\]]*\]*\]*.[^\]*\.[\w-]+)/gi

尝试将前瞻移到正则表达式的前面,如下所示:

 <a href="google.com" class="com"</a>
/(?=([^\]]*\][^\]]*\])*[^\]]*$)(\.[\w-]+)/gi

/gi
是什么/g代表所有人!但使用/gi的目的是什么?@AspiringAqib
i
=不区分大小写。这里没有效果,但仍然是一个很好的做法,以防万一。@JanDvorak您能举个例子吗?请注意,您只计算右括号。也许你应该看看下一个开始括号还是下一个结束括号更近。@AspiringAqib
/a/i.test(“a”)//true
,就是这样做的。谢谢你能解释一下为什么吗?对于正则表达式,我是个新手。@ChrisSobolewski这将修改断言发生的位置。但是,我不知道它为什么会改变结果。我不是100%确定,但我相信这与它计算表达式的顺序有关。在您的中,它首先计算
(\.[\w-]+)
,找到匹配项,然后计算
(?=([^\]*\]*\][^\]*\]]*\]*]*[^\]*$)
,然后不进行其他搜索。因为这也是一个有效的匹配,所以它实际上只是在搜索
(\.[\w-]+)
。通过将向前看移动到前面,它现在首先计算向前看,然后检查是否在向前看之后找到下一个表达式。对不起,我刚才看到了注释。我很高兴你得到了答案!