2016-08-05 163 views
0

最长随之而来的数字模式我有一个字符串:查找字符串

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

我如何才能找到与正则表达式,在该字符串最长随之而来的数字模式anywhere

输出应该123456,因为如果我知道长度恰好:

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

回答

1

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

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

清洁,阴凉的解决方案:) – user1665355

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' 
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]这里是一位数字)。