我试图在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");
答案 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");