我有一段文字,我想在javascript中运行一些正则表达式,以匹配[code]
。我知道我可以使用/\[code\]/g
来执行此操作。
但是,我想忽略使用双括号的情况,如[[code]]
中所示。换句话说,在字符串[code] [[code]] [code]
中,只有第一个和最后一个匹配项匹配。
这可能吗?
答案 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]"]
菲利克斯的方法也很好用。