简单 `replace()` 的第二个参数的问题

Problems with second argument of simple `replace()`

我不明白,为什么这段代码不能正常工作?

"a-b".replace(/-(\w)/g, p1 => p1.toUpperCase()); // "a-B", instead of "aB"

它必须是交换 CSS 驼峰式连字符语法的最简单解决方案。

(/-(\w)/g).exec("a-b")
// [ "-b", "b" ]

因此,"b" 是传递给 replace 回调的第二个参数,第一个参数是整个匹配项。

"a-b".replace(/-(\w)/g, (p1, p2) => p2.toUpperCase())
// "aB"

编辑这样写会更清楚:

"a-b".replace(/-(\w)/g, (match, p1) => p1.toUpperCase())
// "aB"