正则表达式在url中找到id

时间:2011-05-24 22:05:58

标签: javascript regex match

我有以下网址:

http://example.com/product/1/something/another-thing

虽然它也可以是:

http://test.example.com/product/1/something/another-thing

http://completelydifferentdomain.tdl/product/1/something/another-thing

我想使用Javascript从URL获取数字1(id)。

唯一始终如一的是/product。但我还有其他一些页面,其中网址中还有/product,而不是在路径的开头。

正则表达式是什么样的?

4 个答案:

答案 0 :(得分:10)

  1. 使用window.location.pathname 检索当前路径(不包括 TLD)。

  2. 使用JavaScript字符串 match方法。

  3. 使用正则表达式/^\/product\/(\d+)/查找以/ product /开头的路径,然后找到一个或多个数字(在末尾添加i以支持不区分大小写)。

  4. 想出这样的事情:

    var res = window.location.pathname.match(/^\/product\/(\d+)/);
    if (res.length == 2) {
        // use res[1] to get the id.
    }
    

答案 1 :(得分:5)

/\/product\/(\d+)/并获取$1

答案 2 :(得分:1)

作为替代方案,只需要在没有正则表达式的情况下执行此操作(虽然我承认正则表达式在这里非常好)

var url = "http://test.example.com//mypage/1/test/test//test";
var newurl = url.replace("http://","").split("/");
for(i=0;i<newurl.length;i++) {
    if(newurl[i] == "") {
     newurl.splice(i,1);   //this for loop takes care of situatiosn where there may be a // or /// instead of a /
    }
}
alert(newurl[2]); //returns 1

答案 3 :(得分:0)

我想建议另一个选择。

.match(/\/(\d+)+[\/]?/g)

这将返回id的当前所有匹配项。

示例:

var url = 'http://localhost:4000/#/trees/8/detail/3';

    // with slashes
    var ids = url.match(/\/(\d+)+[\/]?/g);
    console.log(ids);

    //without slashes
    ids = url.match(/\/(\d+)+[\/]?/g).map(id => id.replace(/\//g, ''));
    console.log(ids);

通过这种方式,您的URL甚至都没有关系,它只检索数字中的所有部分。

要获得第一个结果,您可以删除g修饰符:

 .match(/\/(\d+)+[\/]?/)

var url = 'http://localhost:4000/#/trees/8';


var id = url.match(/\/(\d+)+[\/]?/);
//With and without slashes
console.log(id);
 没有斜杠的id将在第二个元素中,因为这是完全匹配中找到的第一个组。

希望这对人们有帮助。 干杯!