在这个javascript序列中到底发生了什么?

在这个javascript序列中到底发生了什么?,javascript,javascript-framework,Javascript,Javascript Framework,我想更深入地理解javascript的细微差别 使用以下功能: str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) { ret[param] = value; }); 为什么需要/g 什么 确切地说,它被传递到 功能 这些价值观从何而来 从哪里来的 谢谢 为什么需要/g 因为您可能会在匹配字符串上有多个对,例如a:'b'c:'d' 到底传递给函数的是什么 回调函数获取整个匹配项作为第一个参数,后面的两个参数

我想更深入地理解javascript的细微差别

使用以下功能:

str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
    ret[param] = value;
});
  • 为什么需要/g
  • 什么 确切地说,它被传递到 功能
  • 这些价值观从何而来 从哪里来的
谢谢

为什么需要/g

因为您可能会在匹配字符串上有多个对,例如
a:'b'c:'d'

到底传递给函数的是什么

回调函数获取整个匹配项作为第一个参数,后面的两个参数是在regexp上指定的捕获组

例如:

"a:'b' c:'d'".replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
    console.log($0, param, value);
});
回调将执行两次,在第一次执行时,它将显示
$0
“a:'b'”
参数的
“a”
,以及
值的
“b”

在第二次执行中,对于第二次匹配,将显示
$0
“c:'d'”
“c”
参数和
“d”
的值

为什么需要/g

因为您可能会在匹配字符串上有多个对,例如
a:'b'c:'d'

到底传递给函数的是什么

回调函数获取整个匹配项作为第一个参数,后面的两个参数是在regexp上指定的捕获组

例如:

"a:'b' c:'d'".replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
    console.log($0, param, value);
});
回调将执行两次,在第一次执行时,它将显示
$0
“a:'b'”
参数的
“a”
,以及
值的
“b”


在第二次执行中,对于第二次匹配,将显示
“c:'d'”
表示
$0
“c”
表示
参数
“d”
表示值。

/g中的g代表全局。这将确保替换所有匹配项。如果没有/g,则仅替换第一个匹配项/i(忽略大小写)是另一个常用的开关

每次javascript引擎在字符串中找到匹配项(针对正则表达式),它都会调用您传入的函数,其中包含每个匹配项的参数


详细解释

g in/g代表全球。这将确保替换所有匹配项。如果没有/g,则仅替换第一个匹配项/i(忽略大小写)是另一个常用的开关

每次javascript引擎在字符串中找到匹配项(针对正则表达式),它都会调用您传入的函数,其中包含每个匹配项的参数


详细解释

我认为这是一个jQuerys的相似属性选择器?还是js标签解析器?不,是Json解析器;)那么,当一个函数附加到任何给定js函数的末尾时,它将充当一个回调函数,每个元素都将被传递到该函数中?什么决定了第一个值,第二个值和第三个值?@Ming,否,当函数作为字符串
replace
方法的第二个参数传递时,将为遇到的每个匹配调用它,匹配的字符串将作为回调的第一个参数传递,其余参数由正则表达式中的捕获组数量决定。明白了:“注意,如果第一个参数中的正则表达式是全局的,那么每次替换完整匹配时,函数都会被多次调用”。这是关于这些类型回调一般如何工作的好指南吗?我认为这是一个jQuerys的相似属性选择器?还是js标签解析器?不,是Json解析器;)那么,当一个函数附加到任何给定js函数的末尾时,它将充当一个回调函数,每个元素都将被传递到该函数中?什么决定了第一个值,第二个值和第三个值?@Ming,否,当函数作为字符串
replace
方法的第二个参数传递时,将为遇到的每个匹配调用它,匹配的字符串将作为回调的第一个参数传递,其余参数由正则表达式中的捕获组数量决定。明白了:“注意,如果第一个参数中的正则表达式是全局的,那么每次替换完整匹配时,函数都会被多次调用”。这是关于这些类型回调通常如何工作的好指南吗?