2
閱讀this post和this 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);
}
這將無限循環顯示同樣的結果。我其實有兩個問題。我如何顯示每個整個號碼的索引(在我的樣本字符串"gfarg h43kjh arjh 343"
中是7和18)。而且,爲什麼我當前的代碼無限循環?
確定只是一個快速的,如果正則表達式('myRe'上面)是我的函數將接收的參數。我應該如何預測它會永遠循環,比如拋出異常?是否通過檢查'index'屬性是兩次(我假設手段沒有移動)還是有更簡單的方法? – Juan
那麼,作爲一項安全措施,您可以設置一個計數器並檢查while((myArray = myRe.exec(str))!= null && myCounter
nrabinowitz
...雖然如果你只是想避免這個特殊問題,我想你可以用'if(myRe.test(''))'來測試,它會捕獲一個匹配空字符串的正則表達式。 – nrabinowitz