replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'$2'.toLowerCase())
不转换$ 2小写(不变)
但是:
replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'heLLo'.toLowerCase())
使每一个大写的 “你好” 被替换(如预期)
为什么?
谢谢。
replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'$2'.toLowerCase())
不转换$ 2小写(不变)
但是:
replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'heLLo'.toLowerCase())
使每一个大写的 “你好” 被替换(如预期)
为什么?
谢谢。
因为toLowerCase
在它进入主函数replace
之前被执行。这是你在做什么:
replace(/([a-zA-Z])([A-Z]+)/g,'$1hello')
你可以做你想做这个东西:
var replaceLogic = function(fullMatch, firstGroup, secondGroup){
return firstGroup.toLowerCase() + secondGroup;
};
string.replace(/([a-zA-Z])([A-Z]+)/g, replaceLogic);
好吧,但如果我写函数(){...}里面replace()它将使用它作为一个字符串。我如何强制执行代码? – FlorianB
你不能用替换。您将需要另一个方法,例如将字母的位置存储为小写,然后遍历它们。我认为应该存在更好的方式。 – durum
+1 - 这确实正确回答了所问的具体问题。 (但是你错了不能用'String.replace()'来做到这一点 - 见HamZa的评论。) – ridgerunner
你需要使用一个回调 – HamZa
对不起,甚至不工作瓦特/回调。它认为它是一个字符串:( – FlorianB
检查下面的[demo](http://jsfiddle.net/pGp36/)。'r0'是组0,这意味着整个匹配的字符串。这就是为什么我们添加它,所以我们可以使用'r1'和'r2'。享受 – HamZa