我尝试在 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");
最佳答案
What am I doing wrong?
您正在创建的正则表达式是
^/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");
关于javascript - 正则表达式仅在 Javascript 中存在语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687449/