正则表达式仅在Javascript中具有语法错误

时间:2015-02-24 02:57:50

标签: javascript regex

我试图在Javascript中使用正则表达式但是我收到错误:

SyntaxError: Invalid quantifier ?.

奇怪的是,这个精确的正则表达式适用于此website。但是当在javascript中执行时它会失败吗?

将此^/courses(/[a-z0-9\-]+){2,3}(/|\.jsp)?(\?.*)?$粘贴到website并查看是否有效。

我做错了什么?

var res = "/courses/applied-finance-postgraduate-qualifications/graduate-certificate-in-corporate-finance-3/?stid=b951f"
.replace( new RegExp("^/courses(/[a-z0-9\-]+){2,3}(/|\.jsp)?(\?.*)?$"), "abc");

1 个答案:

答案 0 :(得分:5)

  

我做错了什么?

您正在创建的正则表达式是

^/courses(/[a-z0-9-]+){2,3}(/|.jsp)?(?.*)?$
                                    ^^^^^

注意(?部分,这是非法的(因而是错误)。

\是字符串文字正则表达式中的转义字符。解析器不知道字符串文字中有正则表达式,\被评估为字符串文字的一部分,因此\?变为?。简单测试:

> "\?"
"?"

\.jsp也存在同样的问题,后者变为.jsp.在该位置并非违法,但它会匹配每个字符而不是.

如果要将其传递给正则表达式,则必须将其转义:

"^/courses(/[a-z0-9\\-]+){2,3}(/|\\.jsp)?(\\?.*)?$"
                                 ^        ^

或者你很简单,你使用表达式文字(这要求你逃避/):

.replace(/^\/courses(\/[a-z0-9-]+){2,3}(\/|\.jsp)?(\?.*)?$/, "abc");