最長隨之而來的數字模式我有一個字符串:查找字符串
var mystring = http://www.myurl.com/45/abc/12345/place/123456
我如何才能找到與正則表達式,在該字符串最長隨之而來的數字模式anywhere
?
輸出應該123456
,因爲如果我知道長度恰好:
mystring.match(/\d{6}/g);
最長隨之而來的數字模式我有一個字符串:查找字符串
var mystring = http://www.myurl.com/45/abc/12345/place/123456
我如何才能找到與正則表達式,在該字符串最長隨之而來的數字模式anywhere
?
輸出應該123456
,因爲如果我知道長度恰好:
mystring.match(/\d{6}/g);
這裏是一個可能的解決方案:
console.log(mystring.match(/\d+/g).sort((a, b) => b - a)[0]);
提取號碼的所有序列,然後找到所得數組中最長的。
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'
的問題是,正則表達式本身文本塊匹配的匹配操作過程中,不單獨跟蹤匹配。不可能將最長的數字塊與僅僅是正則表達式匹配。
提取所有數字塊,然後以降序排序值和搶第一項:
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]
這裏是一位數字)。
清潔,陰涼的解決方案:) – user1665355