Мне нужно выяснить, как получить индекс первой цифры в String. У меня есть идея, как это сделать, используя некоторые циклы, но это было бы очень уродливо, поэтому я предпочел бы некоторое регулярное выражение. Может ли кто-нибудь дать мне понять, как это сделать с помощью регулярного выражения?
Как получить индекс первой цифры в String
Ответ 1
firstDigit = 'Testi2ng4'.match(/\d/) // will give you the first digit in the string
indexed = 'Test2ing4'.indexOf(firstDigit)
Ну, я думаю, мне нужно посмотреть на мои методы более внимательно, вы можете просто сделать 'Testin323g'.search(/\d/)
;
Ответ 2
Поиск: [Самый быстрый способ]
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);
Ответ 3
Используйте string.search, чтобы найти индекс с регулярным выражением \d
Ответ 4
Цикл for быстрее, чем решение на основе регулярных выражений:
function indexOfFirstDigit(input) {
let i = 0;
for (; input[i] < '0' || input[i] > '9'; i++);
return i;
}
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
indexOfFirstDigit 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)
Ответ 5
Если вы просто искали один лайнер, вы также можете попробовать подход к функциональному программированию и могли бы сделать что-то вроде следующего:
let myStr = "ID12345";
let myStrIndex = myStr.indexOf(myStr.split('').filter(x => !isNaN(parseInt(x, 10)))[0]);
Строка разделяется на массив символов, а функция фильтра уменьшает этот массив до числа символов. Первый символ нового массива - это первый номер символа в строке, поэтому с помощью indexOf на этом символе вы получаете индекс, который вы ищете.
Конечно, если в строке нет символа номера, в результате вы получите индекс -1. И вы также можете использовать другую проверку, если char является числовой функцией в качестве параметра .filter() - я уверен, что есть что-то более быстрое, если это беспокойство