2011-10-25 17 views
2

this postthis docを読んだ後、正規表現の各出現のインデックスを文字列に返す関数を作成しようとしています(この場合、数)。私はこれを上記のリンクのドキュメントからコードを取っ:文字列内のすべての正規表現の検索

var myRe = /ab*/g; 
var str = "abbcdefabh"; 
var myArray; 
while ((myArray = myRe.exec(str)) != null) 
{ 
    var msg = "Found " + myArray[0] + ". "; 
    msg += "Next match starts at " + myRe.lastIndex; 
    print(msg); 
} 

をそして、これに変え:ループは無限に同じ結果を示すだろう

var myRe = /([0-9]*)/g; 
var str = "gfarg h43kjh arjh 343"; 
var myArray; 

while ((myArray = myRe.exec(str)) != null) 
{ 
    var msg = "Found " + myArray[0] + ". "; 
    msg += "Next match starts at " + myRe.lastIndex; 
    alert(msg); 
} 

。私は実際に2つの質問があります。それぞれ のインデックスをの数字(私のサンプルストリング "gfarg h43kjh arjh 343"は7と18になります)のどのように表示できますか?そして、なぜ私の現在のコードは無限にループしていますか?

答えて

2

正規表現が空の文字列と一致するため、あなたのコードは無限にループしています。それをしない:)。試してください:

var myRe = /([0-9]+)/g; 

これはすでに整数を見つけます。実際の例については、http://jsfiddle.net/nrabinowitz/3aHxS/1/を参照してください。

+0

OKちょっと速いですが、正規表現(上記の 'myRe')が私の関数が受け取るパラメータであればどうでしょうか?私はそれが永遠にループし、例外を投げることをどのように予測するべきですか? 'index'プロパティが2回(これは私が移動していないと推測しています)、あるいはより簡単な方法があることをチェックすることでしょうか? – Juan

+0

安全対策として、カウンタを設定して、while((myArray = myRe.exec(str))!= null && myCounter nrabinowitz

+0

...この特定の問題を避けたいのであれば、 'if(myRe.test( ''))'でテストできると思います。空の文字列にマッチした正規表現をキャッチします。 – nrabinowitz

関連する問題