如何截取字符串中的数字

我们在业务中,有时候会遇到把字符串中的数字截取出来这种需求,比如

var str = 12abc 中的12 单独截取出来

方案一:

1
2
var str = '12abc';
var num = parseInt(str);

这是最简单的方式,但是在使用中会遇到两个问题

  1. parseInt(“abc”) = NaN
    纯字符串会返回NaN,但是我们期待得到的是 1,这个可以通过判断进行适配,不是大问题
  2. parseInt(“0xa”) = 10
    0x 开头的字符串,会被当作16进制的数字进行处理

方案二:

1
2
3
4
5
6
var str = '12abc';
var num = parseInt(str.replace(/^0*/g,""));
console.log(num);//12
var str = '0xbc';
var num = parseInt(str.replace(/^0*/g,""));
console.log(num);//NaN

先通过正则判断,将以0开头的字符串前的0去除,再利用parseInt。以0开头的字符串会返回NaN,因此需要再加一层判断以返回正确的结果

方案三:

1
2
3
4
5
6
7
8
var str = '0xbc';
var num = str.match(/[\d]+/);
console.log(num); //[ '0', index: 0, input: '0xbc' ]
console.log(parseInt(num));//0
var str = 'abc';
var num = str.match(/[\d]+/);
console.log(num); //null
console.log(parseInt(num)); //NaN

通过match( RegExp )方法,将字符串中的数字分离出来。对不含数字的字符串进行处理时,会返回NaN,因此需要专门进行一次适配。

0%