如何使用正则表达式匹配没有重复字符的字符串

3
我有一段文本,想在javascript中使用正则表达式匹配[code]。我知道可以使用/\[code\]/g来实现。
但是,我希望忽略使用双括号的情况,如[[code]]。换句话说,在字符串[code] [[code]] [code]中,只有第一个和最后一个出现才应该匹配。
这是否可能? http://regexr.com/395kr

1
我还使用了负向前瞻:http://regexr.com/395l1 - drew_w
2个回答

2

JavaScript不支持负回溯断言,但似乎在您的情况下负预查已足够:

'[code] [[code]] [code]'.match(/\[code\](?!\])/g)

这个正则表达式确保匹配到的 [code] 后面不是一个 ] 字符。

更新:

它可以进一步改进为

'[code] [[code]] [code]'.match(/\[(?!\[)code\](?!\])/g)

感谢Felix Kling。
请注意:如果出现不成对的大括号,它将会表现得很奇怪。

1
你也可以在开头添加 \[(?!\[) - Felix Kling

0
你可以使用filter()来实现这个功能:
var data = "[code] [[code]] [code]";
data = data.match(/\[+code\]+/g) // gives us ["[code]", "[[code]]", "[code]"]
    .filter(function(x) { return !x.match(/\[\[code\]\]/); });
// data is now ["[code]", "[code]"]

Felix的方法也很有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接