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

时间:2014-07-15 22:50:07

标签: javascript regex

我有一段文字,我想在javascript中运行一些正则表达式,以匹配[code]。我知道我可以使用/\[code\]/g来执行此操作。

但是,我想忽略使用双括号的情况,如[[code]]中所示。换句话说,在字符串[code] [[code]] [code]中,只有第一个和最后一个匹配项匹配。

这可能吗?

http://regexr.com/395kr

2 个答案:

答案 0 :(得分:2)

JS不支持负面的lookbehind断言,但在你的情况下看起来像负面的预测就足够了:

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

此正则表达式可确保匹配[code]后的下一个字符不是]

<强> UPD

可以改进

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

感谢Felix Kling。

注意:如果不成对的大括号,它会表现得很奇怪。

答案 1 :(得分: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]"]

菲利克斯的方法也很好用。