我想更深入地了解 javascript 的细微差别。
取下面的函数:
str.replace(/(\b[^:]+):'([^']+)'/g, function ($0, param, value) {
ret[param] = value;
});
- 为什么需要/g?
- 究竟是什么传递到函数中?
- 这些价值观从何而来?
谢谢!
我想更深入地了解 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);
});
回调将执行两次,它会在第一次执行时显示"a:'b'"
for $0
、"a"
forparam
和"b"
for value
。
在第二次执行中 -for the second match-,将显示"c:'d'"
for $0
、"c"
forparam
和"d"
for 值。
/g 中的 g 代表全局。这确保所有匹配都被替换。在没有 /g 的情况下,仅替换第一个匹配项。/i(忽略大小写)是另一个常用的开关。
每次 javascript 引擎在字符串中找到匹配项(针对您的正则表达式)时,它都会调用您传入的函数,其中包含每个匹配项的参数。
在这里详细解释