【问题标题】:Problems with second argument of simple `replace()`简单 `replace()` 的第二个参数的问题
【发布时间】: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


    【解决方案1】:
    (/-(\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"
    

    【讨论】:

    • MDN 上,有人告诉我,p1p2 ……(在函数中)等于 $1$2……(在字符串中)。
    • @DmitryParzhitsky 您链接到的文章提到传递的第一个参数是整个匹配,然后 p1...pn 是括号子匹配。没错,但与 $1 对应的 p1 是第二个参数。
    • 是的,在最后一刻我得到了它。
    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多