我有一个字符串:
var mystring = http://www.myurl.com/45/abc/12345/place/123456
如何使用正则表达式找到该字符串中最长的结果数字模式anywhere
?
输出应为123456
,如果我确切知道长度:
mystring.match(/\d{6}/g);
答案 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] );