1

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

取下面的函数:

str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
    ret[param] = value;
});
  • 为什么需要/g?
  • 究竟是什么传递到函数中?
  • 这些价值观从何而来?

谢谢!

4

2 回答 2

5

为什么需要/g?

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

究竟是什么传递到函数中?

回调函数将整个匹配作为第一个参数,后面的两个参数是您的正则表达式中指定的捕获组。

例如:

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

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

在第二次执行中 -for the second match-,将显示"c:'d'"for $0"c"forparam"d"for 值。

于 2010-09-09T18:20:30.067 回答
1

/g 中的 g 代表全局。这确保所有匹配都被替换。在没有 /g 的情况下,仅替换第一个匹配项。/i(忽略大小写)是另一个常用的开关。

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

在这里详细解释

于 2010-09-09T18:26:07.747 回答