为什么RegExp会在IE8上生成“意外量词”错误?

时间:2011-02-07 16:24:07

标签: javascript regex

我有一个Javascript错误已经报告给我,不幸的是我不知道如何重现它。 IE8 Developer Tools报告以下错误:意外的量词。以下行产生错误:

var g=RegExp(d+"=([^|]*)").exec(j); //output from closure-compiler

我想我必须正确地逃离管道(\\|)以解决问题,但我不知道我是否正确,因为我不知道如何重现错误。 / p>

欢迎任何建议或解决方案。

感谢。

[UPDATE]

d的值是我正在尝试检索的__utmz Cookie值的键,它们列在像["utmccn", "utmcmd", /* ... */]这样的数组中。那么现在我没有那么多可以做,我和朋友一起在家里流感。

2 个答案:

答案 0 :(得分:6)

“量词”是一个正则表达式运算符,如*+。上面代码中的变量“d”可能包含一些被解释为正则表达式解析器的“代码”的东西,它是无效的。你是对的,它需要适当地逃脱。这是一个非常类似于转义包含在HTML标记中的文本问题的问题,但是因为所讨论的语法完全不同(即正则表达式语法与HTML语法)而不同。

显然,正则表达式语法中有很多特殊字符,所以这需要一个相当粗糙的正则表达式。这是一种可行的方法:

var quoted = unquoted.replace(/([*+.?|\\\[\]{}()])/g, '\\$1');

这可能不会得到所有这些;我会四处寻找代码,这些代码比我刚刚制作的涂料更耐用: - )

由于您发布的代码看起来可能来自某个库,您可能需要检查IE调试器中的堆栈跟踪以找出问题的起始位置。

答案 1 :(得分:0)

作为一般规则,您应该始终转义字符类中的特殊字符,您永远不知道何时遇到失败的正则表达式引擎。