在 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+ 所有格量词时出现正则表达式错误的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 丨JavaScript 高级

JavaScript中 正则表达式的使用 及 常用正则表达式

高级JavaScript第篇

javascript 正则表达式

JavaScript 正则表达式

JavaScript-正则表达式