看一下String.match
,或者更好,它与没有标志的正则表达式RegExp.exec
具有相同的返回值:String.match
g
返回的数组将匹配的文本作为第一项,然后是每个匹配的包含捕获的文本的捕获括号的一项。
也就是说,圆括号¹之间的组构成一个捕获组。如果您只需要完整匹配,您可以使用:
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
我已经删除了捕获组,因为在这种情况下它不会有所作为。没关系,只是微优化。
您可以在此处阅读有关正则表达式的捕获组/反向引用的更多信息。
¹ 并非总是如此,有一些修饰符使它成为非捕获组 (
?:
)、前瞻、后视等,但这些都是题外话。您可以在上面链接的站点中找到有关这些的更多信息。