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

Min*_*ele 4 javascript regex

我有一个Javascript错误已经报告给我,不幸的是我不知道如何重现它.IE8开发人员工具报告以下错误:意外的量词.以下行产生错误:

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

我想我必须正确地逃避管道,\\|以解决问题,但我不知道我是否正确,因为我不知道如何重现错误.

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

谢谢.

[UPDATE]

d__utmz我正在尝试检索的cookie值的键,它们列在这样的数组中["utmccn", "utmcmd", /* ... */].那么现在我没有那么多可以做,我和我的朋友流感在家.

Poi*_*nty 6

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

正则表达式语法中有很多特殊字符,显然,所以这需要一个相当粗糙的正则表达式.这是一种可能的方法来做这样的事情:

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

这可能不会得到所有这些; 我会四处寻找代码,这些代码比我刚刚组成的涂料更加经过测试:-)

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