グループ内の "/"で始まる数字と一致する必要があります。javascript - regexp exec最初のcharが一致しない場合、内部インデックスが進まない
これを行うために、私は、次の正規表現を作った:
var reg = /(^|[^,\/])([0-9]*\.?[0-9]*)/g;
最初の部分マッチは2番目の部分は番号と一致し、文字列と「/」を除く他の何かの始まり。すべてが正常に(それは私が必要と一致する)正規表現について動作します。私はhttps://regex101.com/を使ってテストしています。ここでの例:https://regex101.com/r/7UwEUn/1
問題は、文字列の最初の文字が数字でない場合、js(下のスクリプト)で使用すると無限ループになります。近くに見ると、文字列の始まりと一致し続けるように見えますが、それ以上進展することはありません。
var reg = /(^|[^,\/])([0-9]*\.?[0-9]*)/g;
var text = "a 1 b";
while (match = reg.exec(text)) {
if (typeof match[2] != 'undefined' && match[2] != '') {
numbers.push({'index': match.index + match[1].length, 'value': match[2]});
}
}
文字列が数字( "1 a b")で始まる場合、すべて正常です。
ここに問題があるようです(^ | [^、/]) - 削除^ |無限ループで問題を解決しますが、数値で始まる文字列で必要なものと一致しません。
なぜ内部インデックスが進行していないのでしょうか?