javascript - 正则表达式仅在 Javascript 中存在语法错误

标签 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");

最佳答案

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/

相关文章:

使用字符串进行Python对象匹配

java - 从以 "name:"开头的字符串中获取参数

python - 提高 python 正则表达式的性能

javascript - x(); 是什么意思?引用?

javascript - 如何将外部 JSON 数据从上一个任务中生成的文件传递到任务?

regex - 引用-此正则表达式是什么意思?

regex - 使用正则表达式组匹配去掉括号

javascript - 无法设置远程应答 sdp : Called in wrong state: stable

javascript - 实时更新表单上的值

javascript - RegExp 中的可选字符串