【问题标题】:Regex to match any number after certain strings正则表达式匹配某些字符串后的任何数字
【发布时间】:2017-03-19 19:11:52
【问题描述】:

我想匹配通常在id=/user/ 之后的url 字符串中的用户标识号

例子:

http://dummy.url/url/path/id=7623
http://dummy.url/url/path/user/8743
http://dummy.url/url/path/user/56
http://dummy.url/url/path=88772/user/890&more=87273&variables&here=76233
http://dummy.url/url/path/id=2818372

我需要匹配 7623、8743、56、890、2818372

我没有对此进行太多尝试,因为我是一个正则表达式的菜鸟,我只知道如何对数字、所有数字进行匹配,所以如果 url 有任何数字,它也会匹配它们

数字总是正整数

【问题讨论】:

  • 如果数字总是在末尾,请查看如何使用正则表达式提取字符串的最后一段。而且您已经知道如何匹配数字。应该不难弄清楚!
  • 不,数字不会一直在末尾​​span>
  • 你的第四个例子与此相矛盾。
  • 您通常在 id= 或 /user/ 之后说,您是否知道所有可能出现在您要捕获的数字之前的字符串?
  • @csirmazbendeguz 刚刚编辑了第 4 个示例,所以我不知道您指的是我的编辑还是原始问题

标签: regex


【解决方案1】:

你可以通过定义一个替代来做到这一点:

(?:user\/|id=)\K\d+

Live demo

解释:

(?:         # Start of a non-capturing group
    user\/      # Match `user/`
    |           # Or
    id=         # `id=`
)           # End of non-capturing group
\K\d+       # Forget matched strings then match digits

Javascript方式:

var url = "http://dummy.url/url/path/user/56";
console.log(url.replace(/(user\/|id=)\d+/, function(match, p1) {
	return p1 + 'id';
}));

【讨论】:

  • var finalUrl = url.replace((?:user\/|id=)\K\d+, id); 关于我在这里做错了什么的任何线索?
  • 如果是javascript,不支持\K。您必须删除 \K 并将非捕获组转换为捕获组 (user\/|id=)\d+ 并进行处理。请检查更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
相关资源
最近更新 更多