我有以下字符串
foo:21,bar:11
其中foo和bar不是常数,所以我试图匹配最后":#34; (冒号)字符后的所有数字。
const myString = 'foo: 21, bar: 11'
myString.match(/\d+/g).shift().join() -> 11
我可以用纯正则表达式做同样的事吗?
谢谢!
答案 0 :(得分:2)
使用否定正则表达式,您可以使用此正则表达式:
/\d+(?![^:]*:)/g
(?![^:]*:)
是负面预测,断言我们匹配的数字前面没有:
。
代码演示:
var myString = 'foo: 21, bar: 11';
console.log(myString.match(/\d+(?![^:]*:)/g));
答案 1 :(得分:1)
var myString = 'foo: 21, bar: 11';
console.log(myString.replace(/(.)*\:\s?/,''));
答案 2 :(得分:1)
您可以使用以下两种解决方案之一:
这一个将匹配最后一个:
并抓取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]);
}