我想写一个正则表达式来测试一个字符串是否包含]][[
。例如:[[t]][[t]]
。
我能够使用模式找到以]]
结尾的字符串:
RegExp(/]]/)
但如果我尝试使用该模式:
RegExp(/]\]\(?=\[\[)/)
对于测试[[t]][[t]]
,控制台显示以下错误:
Uncaught Syntax Error: Invalid regular expression: /]\]\(?=\[\[)/: Unmatched ')'
答案 0 :(得分:1)
使用此:
if (/]]\[\[/.test(yourString)) {
// It matches!
} else {
// Nah, no match...
}
请注意,我们需要使用\[
来转义两个大括号,但是大括号]
不需要转义,因为没有可能与字符类混淆。
答案 1 :(得分:1)
您使用(
转发\(
,因此Unmatched ')'
中出现\(?=\[\[)
错误。
执行此操作的最佳方式取决于您想要的确切内容。
如果您只想检查字符串是否包含]][[
,请不要使用正则表达式:
if (yourString.indexOf(']][[') !== -1) {
// do something
}
如果您真的想使用正则表达式,则需要转义[
s而不是]
s:
if (/]]\[\[/.test(yourString)) {
// do something
}
如果你真的想使用正则表达式而不是捕获[[
:
if (/]](?=\[\[)/.test(yourString)) {
// do something
}
如果您想检查匹配的[[
和]]
(例如[[t]]
):
if (/\[\[[^[\]]*]]/.test(yourString)) {
// do something
}
如果您想要背靠背检查两个[[..]]
字符串:
if (/(\[\[[^[\]]*]]){2}/.test(yourString)) {
// do something
}
如果您想检查一个[[..]]
字符串,然后完全相同的字符串([[t]][[t]]
但不是[[foo]][[bar]]
):
if (/(\[\[[^[\]]*]])\1/.test(yourString)) {
// do something
}
Here's a demo以上所有内容,以及一系列单元测试,以演示每种方法的工作原理。
答案 2 :(得分:0)
你需要转义开头方括号,因为它在正则表达式中具有特殊含义,表示字符类的开头。
]](?=\[\[)
答案 3 :(得分:-2)
试试这个,这个正则表达式必须符合你需要的一切:
(\w*[\[\]]+\w*)+
但是,对于每个开放式括号[
,必须有一个封闭的括号]
,这是不同的。
你究竟想要什么?