用于在字符串中查找特定模式的正则表达式

时间:2014-07-25 06:45:08

标签: javascript regex

我想写一个正则表达式来测试一个字符串是否包含]][[。例如:[[t]][[t]]

我能够使用模式找到以]]结尾的字符串:

RegExp(/]]/)

但如果我尝试使用该模式:

RegExp(/]\]\(?=\[\[)/)

对于测试[[t]][[t]],控制台显示以下错误:

Uncaught Syntax Error: Invalid regular expression: /]\]\(?=\[\[)/: Unmatched ')' 

4 个答案:

答案 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*)+

但是,对于每个开放式括号[,必须有一个封闭的括号],这是不同的。
你究竟想要什么?