我有以下网址:
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
,而不是在路径的开头。
正则表达式是什么样的?
答案 0 :(得分:10)
使用window.location.pathname
检索当前路径(不包括
TLD)。
使用JavaScript字符串
match
方法。
使用正则表达式/^\/product\/(\d+)/
查找以/ product /开头的路径,然后找到一个或多个数字(在末尾添加i
以支持不区分大小写)。
想出这样的事情:
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);
希望这对人们有帮助。 干杯!