我想深入瞭解javascript的細微差別。這個javascript序列究竟發生了什麼?
採取以下功能:
str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
ret[param] = value;
});
- 爲什麼有需要/ g的?
- 什麼 正好被傳入 函數?
- 這些值來自哪裏 從?
謝謝!
我想深入瞭解javascript的細微差別。這個javascript序列究竟發生了什麼?
採取以下功能:
str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
ret[param] = value;
});
謝謝!
爲什麼需要/ g?
因爲假設您在匹配的字符串中會有多個對,例如a:'b' c:'d'
究竟是什麼傳遞給函數?
回調函數獲取整個匹配作爲第一個參數,後面的兩個參數是在您的正則表達式中指定的捕獲組。
例如:
"a:'b' c:'d'".replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
console.log($0, param, value);
});
回調將被執行兩次,它會告訴你的value
"a:'b'"
爲$0
,"a"
爲param
和"b"
第一執行。
在第二次執行 - 對於第二匹配 - ,會告訴你的價值"c:'d'"
爲$0
,"c"
爲param
和"d"
。
g in/g代表全局。這確保所有匹配被替換。在沒有/ g的情況下,只有第一個匹配被替換。 /我(忽略大小寫)是另一個常用的開關。
每當javascript引擎在字符串中找到一個匹配項(用於正則表達式)時,它會調用傳入的函數,併爲每個匹配項指定一個參數。
詳細解釋here
我認爲這是一個jQuerys的相似的屬性選擇器?或者是一個js標籤解析器?不,是一個Json解析器;) – 2010-09-09 18:39:18
所以,當一個函數被附加到任何給定的js函數的末尾時,它將充當一個回調函數,每個元素都將被傳遞給它?什麼決定了第一個價值,第二個和第三個價值? – 2010-09-09 18:48:42
@Ming,不,當一個函數作爲String的replace方法的第二個參數傳遞時,它會針對每個遇到的匹配被調用,匹配的字符串將作爲該回調的第一個參數傳遞,其餘的參數是取決於您在正則表達式中的捕獲組的數量。 [更多信息...](https://developer.mozilla。org/en/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter) – CMS 2010-09-09 18:52:15