在字符串中查找最长的结果数字模式

时间:2016-08-05 09:58:21

标签: javascript regex

我有一个字符串:

var mystring = http://www.myurl.com/45/abc/12345/place/123456

如何使用正则表达式找到该字符串中最长的结果数字模式anywhere

输出应为123456,如果我确切知道长度:

mystring.match(/\d{6}/g);

3 个答案:

答案 0 :(得分:3)

问题是正则表达式本身在匹配操作期间匹配一大块文本,并且不会自动跟踪匹配。不能将最长的数字块与纯正则表达式匹配。

提取所有数字块,然后按降序对值进行排序并获取第一项:



var mystring = "http://www.myurl.com/45/abc/12345/place/123456";
console.log(mystring.match(/\d+/g).sort(function (a, b) { return b.length - a.length; })[0]);




请注意,不需要使用捕获组(()应该被删除,因为我们没有使用捕获的值。

+量词匹配量化模式的一次或多次出现(即\d[0-9]此处,数字)。

答案 1 :(得分:2)

提取所有数字序列,然后在结果数组中找到最长的数字。

function byLength(a,b) { return a.length > b.length ? -1 : a.length == b.length ? 0 : 1 }
var digit_sequences = mystring.match(/(\d+)/g).sort(byLength)
digit_sequences[0] // '123456'

答案 2 :(得分:1)

这是一个可能的解决方案:

console.log( mystring.match(/\d+/g).sort((a, b) => b - a)[0] );