23

文字列の最初の桁のインデックスを取得する方法を見つける必要があります。いくつかのループを使用してそれを行う方法を考えていますが、それは本当に醜いので、正規表現を好むでしょう。誰かが正規表現を使用してそれを行う方法の手がかりを教えてもらえますか?

4

5 に答える 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 に答える
4

string.searchを使用して、正規表現でインデックスを見つけます\d

于 2013-03-28T13:03:42.173 に答える
1

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 に答える