在 JavaScript 正则表达式中使用 1+ 所有格量词时出现正则表达式错误
Posted
技术标签:
【中文标题】在 JavaScript 正则表达式中使用 1+ 所有格量词时出现正则表达式错误【英文标题】:Regex eError when using 1+ possessive quantifier in JavaScript regex在 JavaScript 正则表达式中使用 1+ 所有格量词时出现正则表达式错误 【发布时间】:2014-10-05 00:28:57 【问题描述】:由于我同时学习 javascript 和 Express.js,所以我在发出 get 请求时尝试使用正则表达式
为了熟悉正则表达式,我使用了这个chart(也在下面转载)
Greedy Reluctant Possessive Meaning
X? X?? X?+ X, once or not at all
X* X*? X*+ X, zero or more times
X+ X+? X++ X, one or more times
Xn Xn? Xn+ X, exactly n times
Xn, Xn,? Xn,+ X, at least n times
Xn,m Xn,m? Xn,m+ X, at least n but not more than m times
我的问题是,如果正则表达式只有一个 /
,我如何才能让正则表达式匹配一个 url。
换句话说,它只会匹配默认的 url localhost:1337/
app.get(/\/1/, function (req, res)
res.render("index");
);
但是,我上面的当前正则表达式匹配其他路径名(即localhost:1337/home/login
),因为现在我知道它使用了贪婪量词
阅读更多关于正则表达式的内容后,我更改了量词使其具有所有格。/\/1+/
但是后来express报了这个错误:
Syntax Error: Invalid Regular Expression: /\/1+/: Nothing to Repeat
那么我的正则表达式语法错了吗?
【问题讨论】:
【参考方案1】:JavaScript 不支持所有格量词。您看到的错误是因为 +
只能用作贪婪的一个或多个量词。
您引用的图表来自 Oracle,并解释了 Java 支持的量词,而不是 JavaScript。
您无需求助于任何特殊的东西来进行您想要的匹配。
如果你想匹配“一个以/
结尾的字符串,其中没有其他斜杠,你可以使用:
/^[^/]+\/$/
字符串的开头,一个或多个非斜线,后跟一个斜线,然后是字符串的结尾。
【讨论】:
哦,我不知道。但是无论如何都要制作正则表达式,所以它回答了我的问题 一个匹配字符串的正则表达式只有一个/
是/\/$/
其实应该是/^[^/]*\/[^/]*$/
。 /\/$/
的问题在于它匹配任何以 /
结尾的字符串,因此除了末尾的那个之外,字符串中的前面可能还有一个 /
。以上是关于在 JavaScript 正则表达式中使用 1+ 所有格量词时出现正则表达式错误的主要内容,如果未能解决你的问题,请参考以下文章