在正则表达式中:SyntaxError:Unexpected token]

时间:2012-04-09 06:19:40

标签: javascript regex

我使用了以下表达式

str.match(tag+"(\s*=\s*)((['"]*)(.+?)(['"]*)\1)");

其中str是要匹配的字符串,tag是变量

例如,上面的表达式应匹配

m="img"
m='img'

其中tag = m;
但在上面提到的内衬我正在

  

SyntaxError:意外的令牌]

2 个答案:

答案 0 :(得分:2)

如果从正则表达式的末尾删除/ 1,它适用于m =“img”:

m(\s*=\s*)((['\"]*)(.*)(['\"]*))

“\ 1”将替换为模式中第一个子模式的值,因此如果您想匹配m =“img”; m ='img',您应该使用以下内容:

(m\s*=\s*)((['\"]*)(.*)(['\"]*)\1)

其中m是你的标签变量。

编辑:
你可以测试你的javascript regexps here

答案 1 :(得分:1)

  • 如上所述,报价应该被转义。
  • 反向引用也应该被转义。
  • 一旦使用反向引用,则不需要带引号的第二组
  • 它是第三个parethesis组,其中包含引号,因此您需要\ 3,而不是\ 1
  • 几乎不需要匹配任何数量的引号,例如:m = '''img'''

考虑到所有这些要点,可以得到以下解决方案:

var tag = 'm';
"m='img'".match(tag+"(\s*=\s*)((['\"]?)(.+?)\\3)")
// ["m='img'", "=", "'img'", "'", "img"]