这个javascript序列究竟发生了什么?

min*_*eow 1 javascript javascript-framework

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

采取以下功能:

str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
    ret[param] = value;
});
Run Code Online (Sandbox Code Playgroud)
  • 为什么需要/ g?
  • 究竟是什么传递给函数?
  • 这些价值来自哪里?

谢谢!

CMS*_*CMS 5

为什么需要/ g?

因为大概你会在匹配的字符串上有多对,例如 a:'b' c:'d'

究竟是什么传递给函数?

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

例如:

"a:'b' c:'d'".replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
    console.log($0, param, value);
});
Run Code Online (Sandbox Code Playgroud)

回调将被执行两次,它将在第一次执行时显示"a:'b'"for $0,"a"for param"b"for value.

在第二个执行-对于第二匹配- ,会告诉你"c:'d'"$0,"c"用于param"d"对价值.