gpt4 book ai didi

javascript - 如何让我的正则表达式只返回完全匹配

转载 作者:行者123 更新时间:2023-12-03 09:46:48 25 4
gpt4 key购买 nike

我正在考虑用 javaScript 构建一个 super 简单的路由器...到目前为止我有这个:

var match,routeMatcher,p;

var routes = {
"/users/:uid/pictures/:uid" : "userpictures",
"/users/:uid" : "user"
};

var url = "/users/1024/pictures/456";

for(var i in routes) {
//need to cache this regex
routeMatcher = new RegExp(i.replace(/:[^\s/]+/g, '([\\w-]+)'));
if(url.match(routeMatcher)) {
match = url.match(routeMatcher);
p = routes[i];
console.log(p);
}
}

这是一个 fiddle http://jsfiddle.net/D6txe/

这行得通。当我输入像“users/1000”这样的 url 时,我得到了相应的函数名称(现在只是想知道如何将字符串作为函数调用)。问题是如果我有两条与我的示例非常相似的路由,则正则表达式会同时匹配这两条路由。在上面的示例中,理想情况下,我只希望匹配第二条路线,但不幸的是,两条路线都匹配了,因为当然第一条路线也是匹配的。

有什么方法可以使正则表达式只返回完全匹配项吗?我有另一种解决方案,它涉及计算输入 url 中的正斜杠,并且只调用具有匹配数量的正斜杠的路由....但这看起来很不雅观。

最佳答案

试试这个:

routeMatcher = new RegExp(i.replace(/:[^\s/]+/g, '([\\w-]+)') + "$");

如果您还想支持尾随 / 以覆盖 /users/1024/pictures/456/,您可以按如下方式更改 RegExp:

routeMatcher = new RegExp(i.replace(/:[^\s/]+/g, '([\\w-]+)') + "/?$");

关于javascript - 如何让我的正则表达式只返回完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950085/

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