2016-08-05 144 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]這裏是一位數字)。