我想深入了解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