我需要找出如何获取字符串中第一个数字的索引。我知道如何使用一些循环来做到这一点,但它真的很难看,所以我更喜欢一些正则表达式。有人可以告诉我如何使用正则表达式来做到这一点吗?
问问题
37903 次
5 回答
21
firstDigit = 'Testi2ng4'.match(/\d/) // will give you the first digit in the string
indexed = 'Test2ing4'.indexOf(firstDigit)
好吧,我想我需要更仔细地查看我的方法,你可以这样做'Testin323g'.search(/\d/)
;
于 2013-03-28T13:03:46.947 回答
20
搜索:【最快的方式】
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);
于 2013-03-28T13:04:23.317 回答
9
for 循环比基于正则表达式的解决方案最快:
function indexOfFirstDigit(input) {
let i = 0;
for (; input[i] < '0' || input[i] > '9'; i++);
return i == input.length ? -1 : i;
}
function indexOfNaN(input) {
let i = 0;
for (; input[i] >= '0' && input[i] <= '9'; i++);
return i == input.length ? -1 : i;
}
jsbench(越高越好):
TestCase results for your browser Firefox version 54.0
Test name Benchmark results
indexOfFirstDigit 11,175,400 (±2.77)
regex search 3,787,617 (±5.22) (epascarello)
regex match 2,157,958 (±6.49) (epascarello)
regex match + indexOf 1,131,094 (±4.63) (VoronoiPotato)
我再次进行了一些快速测试。仍然最快:
于 2017-04-22T09:40:43.477 回答
4
使用string.search使用正则表达式查找索引\d
于 2013-03-28T13:03:42.173 回答
1
如果您只是在寻找一个衬里,您也可以尝试一种函数式编程方法,并且可以执行以下操作:
let myStr = "ID12345";
let myStrIndex = myStr.indexOf(myStr.split('').filter(x => !isNaN(parseInt(x, 10)))[0]);
字符串被分割成一个字符数组,过滤器函数将该数组缩减为数字字符。新数组的第一个字符是字符串中的第一个数字字符,因此在该字符上使用 indexOf 可以为您提供所需的索引。
当然,如果字符串中没有数字字符,您将得到 -1 的索引。您还可以使用不同的检查 char 是否为数字函数作为 .filter() 的参数 - 如果这是一个问题,我相信会有更快的速度
于 2018-02-15T23:33:17.483 回答