gpt4 book ai didi

javascript - nodejs request.url.match(regexp) 似乎除了匹配之外还返回匹配的子字符串

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:40 26 4
gpt4 key购买 nike

我试过一段这样的代码

var match = req.url.match(/^\/user\/(.+)/)

然后像这样传递一个 url "___http://someurl/user/jane"

结果匹配被初始化为一个包含以下元素的数组

match[0]='/user/jane'
match[1]='jane'

我本以为只有一个元素,即 match[0] 中的第一个元素。为什么返回第二个字符串 - 它似乎与正则表达式不匹配。

我对 JavaScript 的经验很少,四处寻找后找不到解释。感谢对此的解释

谢谢

最佳答案

看看String.match ,或更好,RegExp.exec对于没有 g 标志的正则表达式,它与 String.match 具有相同的返回值:

The returned array has the matched text as the first item, and then one item for each capturing parenthesis that matched containing the text that was captured.

也就是说,圆括号¹ 之间的组构成捕获组。如果您只需要完全匹配,您可以使用:

var match = req.url.match(/^\/user\/.+/)[0];
console.log(match); //logs: "/user/jane"

这将提取整个匹配项(在索引 0 处),将其返回给变量 match,数组的其余部分将被丢弃。

注意:如果正则表达式可能不匹配,您应该在提取完整匹配之前测试它是否返回匹配以防止错误:

var match = req.url.match(/^\/user\/.+/);
if (match !== null) {
match = match[0];
console.log(match); //"/user/jane"
} else {
console.log("no match");
}

这是一个摆弄的现场演示:jsFiddle

我已经删除了捕获组,因为在这种情况下它不会有什么不同。实际上并不重要,只是一个微优化。

您可以阅读有关正则表达式捕获组/反向引用的更多信息 here .


¹ 情况并非总是如此,有些修饰符使其成为非捕获组 ( ?:)、前瞻、后视等,但这些都是题外话。您可以在上面链接的网站中找到更多相关信息。

关于javascript - nodejs request.url.match(regexp) 似乎除了匹配之外还返回匹配的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com