如何使用正则表达式从url中提取两个字符串?

时间:2015-05-27 12:13:33

标签: javascript regex

我已成功匹配字符串,但我需要将其拆分并向URL添加一些新段。如果可以通过正则表达式,如何匹配url并提取两个字符串,如下例所示?

目前的结果:

["domain.com/collection/430000000000000"]

期望的结果:

["domain.com/collection/", "430000000000000"]

当前代码:

var reg = new RegExp('domain.com\/collection\/[0-9]+');
var str = 'http://localhost:3000/#/domain.com/collection/430000000000000?page=0&layout=grid';

console.log(str.match(reg));

2 个答案:

答案 0 :(得分:3)

你想要Regex Capture Groups

将要提取的部分放入这样的大括号中,每个部分形成一个匹配组:

new RegExp('(domain.com\/collection\/)([0-9]+)') 

然后在匹配之后,你可以通过索引提取每个组内容,索引0是整个字符串匹配,1是第一组,2是第二组等等(感谢附录,jcubic!)。

这是使用exec()上的/\d(\d)\d/.exec("123"); // → ["123", "2"] 完成的,如here所描述的那样:

parentId

首先是整场比赛,然后小组按照它们在模式中出现的顺序进行匹配。

答案 1 :(得分:1)

您可以声明一个数组,然后使用括号捕获所需的值(因此,使用capturing groups)填充它:



var reg = /(domain.com\/collection)\/([0-9]+)/g;
//         ^                      ^  ^      ^ 
var str = 'http://localhost:3000/#/domain.com/collection/430000000000000?page=0&layout=grid';
var arr = [];
while ((m = reg.exec(str)) !== null) {
       arr.push(m[1]);
       arr.push(m[2]);
}
console.log(arr);




输出:["domain.com/collection", "430000000000000"]