为什么toLowerCase()不能在替换中工作

时间:2015-11-25 06:19:23

标签: javascript

根据我的想法,此代码应返回aha aha aha,但会返回Aha Aha Aha

"Aha Aha Aha".replace(/([A-Z])/g,"$1".toLowerCase());

与toUpperCase()...

相同
"Aha Aha Aha".replace(/([a-z])/g,"$1".toUpperCase());

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

它不起作用,因为您将.toUpperCase应用于字符串"$1",当然保持不变。然后将未更改的字符串传递给.replace函数,结果是......好吧,没有任何反应。

这样做的正确方法是使用回调:

str.replace(/[a-z]/g,function(m) {return m.toUpperCase();});

(我当然假设这是一个练习 - 在这个特殊情况下,str.toUpperCase()直接会好得多!)

将回调传递给.replace()是一件非常有用的事情。需要注意的重要一点是,传递给它的参数将首先是整个匹配,然后是第一个子模式,依此类推。这就是为什么我删除了正则表达式中的() - 它们是不必要的。