【问题标题】:How to extract two strings from url using regex?如何使用正则表达式从 url 中提取两个字符串?
【发布时间】:2015-05-28 03:33:14
【问题描述】:

我已经成功匹配了一个字符串,但是我需要拆分它并在 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));

【问题讨论】:

  • 如果domain.com/collection/ 始终是一个已知常量,那么为什么不直接使用"domain.com/collection/430000000000000".split('domain.com/collection/')
  • @vsync id后面有东西。
  • @jcubic - 所以?再次拆分它。给我一个场景,如果你可以的话,这可能会失败
  • @vsync 你将拥有['http://localhost:3000/#', '430000000000000?page=0&layout=grid']。或["http://localhost:3000/#/", "domain.com/collection/", "430000000000000?page=0&layout=grid"],如果您保留拆分文本。
  • @jcubic - 不,我不会......无论如何,哈希值在那个数字之后,从来没有在之前,所以你再次拆分哈希值或者之后的任何内容......它会起作用

标签: javascript regex


【解决方案1】:

你想要Regex Capture Groups

像这样把你要提取的部分放到大括号中,每个部分组成一个匹配组:

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

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

这是使用正则表达式字符串上的exec() 完成的,如here 所述:

/\d(\d)\d/.exec("123");
// → ["123", "2"]

首先是整个匹配,然后是组匹配它们在模式中出现的顺序。

【讨论】:

  • 0 索引总是匹配整个正则表达式。
【解决方案2】:

您可以声明一个数组,然后用您可以用括号捕获的所需值填充它(因此,使用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"]

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 2018-06-23
    • 2013-07-29
    • 1970-01-01
    • 2015-03-10
    • 2011-07-24
    • 2017-05-12
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多