根据我的想法,此代码应返回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());
为什么会发生这种情况?
答案 0 :(得分:3)
它不起作用,因为您将.toUpperCase
应用于字符串"$1"
,当然保持不变。然后将未更改的字符串传递给.replace
函数,结果是......好吧,没有任何反应。
这样做的正确方法是使用回调:
str.replace(/[a-z]/g,function(m) {return m.toUpperCase();});
(我当然假设这是一个练习 - 在这个特殊情况下,str.toUpperCase()
直接会好得多!)
将回调传递给.replace()
是一件非常有用的事情。需要注意的重要一点是,传递给它的参数将首先是整个匹配,然后是第一个子模式,依此类推。这就是为什么我删除了正则表达式中的()
- 它们是不必要的。