如何获取String中第一个数字的索引

时间:2013-03-28 12:57:35

标签: javascript regex

我需要找出如何获取String中第一个数字的索引。我知道如何使用一些循环,但它会非常难看所以我更喜欢一些正则表达式。有人能告诉我如何使用正则表达式做到这一点吗?

5 个答案:

答案 0 :(得分:17)

搜索: [最快的方式]

var str = "asdf1";
var search = str.search(/\d/)
console.log(search);

匹配: [比for循环慢,只是显示另一种方式]

var str = "asdf1";
var match = str.match(/(\D+)?\d/)
var index = match ? match[0].length-1 : -1;
console.log(index);

答案 1 :(得分:9)

firstDigit = 'Testi2ng4'.match(/\d/) // will give you the first digit in the string
indexed = 'Test2ing4'.indexOf(firstDigit)

嗯,我想我需要更仔细地研究一下我的方法,你可以做'Testin323g'.search(/\d/);

答案 2 :(得分:4)

使用string.search查找带有正则表达式\d

的索引

答案 3 :(得分:0)

for循环比基于正则表达式的解决方案更快:

function indexOfNaN(input) {
  let i = 0;
  for (; input[i] >= '0' && input[i] <= '9'; i++);
  return i;
}

在线尝试!

jsbench(越高越好):

TestCase results for your browser Firefox version 54.0
Test name               Benchmark results
indexOfNan              11,175,400 (±2.77)
regex search             3,787,617 (±5.22)
regex match              2,157,958 (±6.49)
regex match + indexOf    1,131,094 (±4.63)

答案 4 :(得分:0)

如果您只是在寻找一个内衬,您还可以尝试使用函数式编程方法,并且可以执行以下操作:

let myStr = "ID12345";
let myStrIndex = myStr.indexOf(myStr.split('').filter(x => !isNaN(parseInt(x, 10)))[0]);

字符串被拆分为一个字符数组,过滤器函数将该数组简化为数字字符。新数组的第一个字符是字符串中的第一个数字字符,因此在该字符上使用indexOf可以为您提供所需的索引。

当然,如果字符串中没有数字字符,那么结果将得到-1的索引。你也可以使用一个不同的检查,如果char是数字函数作为.filter()的参数 - 我确信如果这是一个关注的话会有更快的东西