【发布时间】:2019-12-17 22:07:14
【问题描述】:
我最近在玩.replace(),发现以下行为很奇怪。取下面两个代码sn-ps:
const str = "Hello world";
const res = str.replace(/(o)/g, "$1".repeat(3));
console.log(res); // Hellooo wooorld (which I expected)
上面打印了"Hellooo wooorld",这是我的预期,因为我在匹配的o字符上使用.repeat(3)。
但是,当我应用相同的逻辑并使用.toUpperCase() 时,我的字符串保持不变:
const str = "Hello world";
const res = str.replace(/(o)/g, "$1".toUpperCase());
console.log(res); // Hello world (expected HellO wOrld)
令我惊讶的是,上面没有工作,因为它打印了原始字符串而不是"HellO wOrld"。 那么,为什么第一个代码 sn-p 有效,而第二个无效?。我知道我可以为此使用replacement 函数,但我更关心的是为什么第一个 sn-p 有效,而第二个无效。
【问题讨论】:
-
"$1".toUpperCase()仍然是"$1"。"$1".repeat(3)是"$1$1$1"。您将这些字符串传递给函数,而不是方法调用。
标签: javascript replace