我有以下字符串匹配字符串
富:21條:11
其中foo和bar不常數,所以我想匹配所有最後的「:」(冒號)字符後的數字。
const myString = 'foo: 21, bar: 11'
myString.match(/\d+/g).shift().join() -> 11
我可以只使用純正則表達式嗎?
謝謝!
我有以下字符串匹配字符串
富:21條:11
其中foo和bar不常數,所以我想匹配所有最後的「:」(冒號)字符後的數字。
const myString = 'foo: 21, bar: 11'
myString.match(/\d+/g).shift().join() -> 11
我可以只使用純正則表達式嗎?
謝謝!
使用負正則表達式,你可以使用這個表達式:
/\d+(?![^:]*:)/g
(?![^:]*:)
爲負先行斷言,有超前的數字沒有:
我們匹配。
代碼演示:
var myString = 'foo: 21, bar: 11';
console.log(myString.match(/\d+(?![^:]*:)/g));
此解決方案與我的方法不同,因爲它會提取最後一個':'之後的多個數字塊 - 請參閱[本演示](https:// regex101的.com/R/xFNZ0z/1)。如果沒有':'([demo](https://regex101.com/r/xFNZ0z/2)),它也會抓住數字。但我不知道這對OP是否有任何重要性。 –
var myString = 'foo: 21, bar: 11';
console.log(myString.replace(/(.)*\:\s?/,''));
這是幹什麼的?在最新之前更換一切:? – Anderson
是的。 (。)*表示全部。 \: - >最後一列\ s?如果有空間,它將被刪除。否則不行動。 –
什麼是量化羣體,爲什麼不只是'。*' –
您可使用的兩種解決方案:
這人會匹配到最後:
和0後搶位+空格:
var s = "foo: 21, bar: 11";
var m = s.match(/.*:\s*(\d+)/);
if (m !== null) {
console.log(m[1]);
}
而這其中會發現一個:
隨後與0+空格,然後將捕獲1+位到第1組,然後將匹配0+比:
其他字符最多字符串的結尾。
var s = "foo: 21, bar: 11";
m1 = s.match(/:\s*(\d+)[^:]*$/);
if (m1 !== null) {
console.log(m1[1]);
}
請注意,我假定該字符串始終包含至少一個':',並且只有一個數字塊需要在其後捕獲。 –
可以使用'str.match(/:\ S *(\ d +)$ /)[1]'。 – Tushar
有時字符串只是「bar:11」,所以我想避免使用[1] – Anderson