Javascript 如何使用正则表达式匹配没有双字符的字符串
我有一个文本块,我想在javascript中运行一些正则表达式,以匹配Javascript 如何使用正则表达式匹配没有双字符的字符串,javascript,regex,Javascript,Regex,我有一个文本块,我想在javascript中运行一些正则表达式,以匹配[code]。我知道我可以用/\[code\]/g来做这件事 但是,我想忽略使用双括号的情况,如[[code]]。因此,换句话说,在字符串[code][[code]][code]中,只有第一个和最后一个匹配项 这可能吗 JS不支持消极的lookbehind断言,但在您的情况下,消极的lookbehind就足够了: '[code] [[code]] [code]'.match(/\[code\](?!\])/g) 此正则表达式
[code]
。我知道我可以用/\[code\]/g
来做这件事
但是,我想忽略使用双括号的情况,如[[code]]
。因此,换句话说,在字符串[code][[code]][code]
中,只有第一个和最后一个匹配项
这可能吗
JS不支持消极的lookbehind断言,但在您的情况下,消极的lookbehind就足够了:
'[code] [[code]] [code]'.match(/\[code\](?!\])/g)
此正则表达式确保匹配的[code]
后的下一个字符不是]
UPD:
可以改进为
'[code] [[code]] [code]'.match(/\[(?!\[)code\](?!\])/g)
感谢菲利克斯·克林
注意:如果是不成对的大括号,它的行为会很奇怪。您可以使用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的方法也很有效。你也可以在开头添加
\[(?!\[)
。我还使用了一个消极的前瞻: