我具有正則表達式的陣列,此刻在長度只是一個元件,並且我要搜索/由通過陣列循環替換字符串使用匿名功能:在與string.replace()方法
var str = "i am*happy all the*time",
rex = [
/(\S)\s*\*\s*(\S)/g
],
i = 0,
r = rex.length;
這是我試着在瞬間進行實現這一點:
for (i; i < r; i += 1) {
str.replace(rex[i], function(star, p1, p2) {
console.log(i, star, p1, p2);
return p1 + '\\s*(.*)\\s*' + p2;
});
}
結果應該是i am*\\s*(.*)\\s*happy all the\\s*(.*)\\s*time
。但目前,str
似乎不受影響,即使我檢查控制檯時正在進行相關的匹配。你可以自己看到這個here。
所以我錯過了一些簡單的東西,我誤解了有關在String.replace()中使用lambda表達式的問題,還是在這裏存在更根本性錯誤?
...
額外的信息: 我使用Chrome 24,現在,如果這是利益;我前一段時間讀過String.replace()中的匿名函數不適用於所有瀏覽器,儘管我認爲現在可以解決這個問題(該選項是在ECMAScript v3中引入的)。
JS字符串是不可變的,函數*返回一個新的字符串。 – Bergi 2013-02-23 12:19:12
順便說一句,而不是該功能,你可以使用'「$ 1 \\ s *(。*)\\ s * $ 2」' – Bergi 2013-02-23 12:20:13
@Bergi謝謝。意識到了字符串的替代方法,但是正在用更復雜的函數來玩轉。只是想先弄清楚基礎知識。 – guypursey 2013-02-23 20:38:55