2011-07-13 61 views
1

嘗試在一個新匹配中使用匹配函數的結果時出現問題。JavaScript中的重複匹配

這是代碼:

<html> 
<body> 

<script type="text/javascript"> 

p="somelongtextmelongtextmelongtextmelongtext"; 

f1 = p.match(/some/g); 

document.write(f1); 

f2 = f1.match(/om/g); 

document.write(f2); 

</script> 

</body> 
</html> 

輸出是單詞「一些」時,它必須是「嗡」。我不明白這種行爲,我需要在更復雜的情況下輸出f1。

在此先感謝。

回答

6

您確定您粘貼了與您測試的完全相同的代碼嗎?

我問,因爲f1 = p.match(/some/g);返回一個匹配數組,而Array對象沒有.match方法,所以f1.match(/om/g);應該拋出一個錯誤。

不管怎麼說,要做到這一點正確的做法是:

p="somelongtextmelongtextmelongtextmelongtext"; 
f1 = p.match(/some/g); 
if (f1) { 
    f2 = f1[0].match(/om/g); 
    console.log(f2); 
} 
+0

是的。這就是代碼。我很困惑,因爲我總是看到結果是一個字符串,因爲格式是match1,match2等......和document.write(f1);顯示有效的輸出而不使用數組格式。非常感謝你。 – Memochipan

+0

使用控制檯比使用document.write測試東西要好。它會顯示一個數組,而不是數組的toString()等價物。 – epascarello

+0

編輯我的答案使用'console.log' per @ epascarello的評論 – digitalbath

0

的輸出爲 「一些」,因爲它是在線路出現故障:F2 = f1.match(/ OM /克);它永遠不會寫入f2。

f1是一個對象變量,而不是一個字符串。該對象沒有匹配方法。用下面的代替行:

f2 = f1.toString()。match(/ om/g);

HTH

+0

由於'.match()'方法可能會返回一個包含多個匹配的數組,並且'Array.toString()'將所有匹配與逗號字符連接在一起,使得發送'.match'可能匹配你不想要的東西。 – digitalbath