【发布时间】:2015-12-26 20:05:53
【问题描述】:
我不明白,为什么这段代码不能正常工作?
"a-b".replace(/-(\w)/g, p1 => p1.toUpperCase()); // "a-B", instead of "aB"
它必须是在 camelCase 上交换 CSS 连字符语法的最简单的解决方案。
【问题讨论】:
标签: javascript regex google-chrome replace capturing-group
我不明白,为什么这段代码不能正常工作?
"a-b".replace(/-(\w)/g, p1 => p1.toUpperCase()); // "a-B", instead of "aB"
它必须是在 camelCase 上交换 CSS 连字符语法的最简单的解决方案。
【问题讨论】:
标签: javascript regex google-chrome replace capturing-group
(/-(\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"
【讨论】:
p1、p2 ……(在函数中)等于 $1、$2……(在字符串中)。
p1...pn 是括号子匹配。没错,但与 $1 对应的 p1 是第二个参数。