2013-12-15 38 views
0

此:为什么toLowerCase()不适用于正则表达式?

replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'$2'.toLowerCase()) 

不转换$ 2小写(不变)

但是:

replace(/([a-zA-Z])([A-Z]+)/g,'$1'+'heLLo'.toLowerCase()) 

使每一个大写的 “你好” 被替换(如预期)

为什么?

谢谢。

+1

你需要使用一个回调 – HamZa

+0

对不起,甚至不工作瓦特/回调。它认为它是一个字符串:( – FlorianB

+1

检查下面的[demo](http://jsfiddle.net/pGp36/)。'r0'是组0,这意味着整个匹配的字符串。这就是为什么我们添加它,所以我们可以使用'r1'和'r2'。享受 – HamZa

回答

2

因为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); 
+0

好吧,但如果我写函数(){...}里面replace()它将使用它作为一个字符串。我如何强制执行代码? – FlorianB

+0

你不能用替换。您将需要另一个方法,例如将字母的位置存储为小写,然后遍历它们。我认为应该存在更好的方式。 – durum

+1

+1 - 这确实正确回答了所问的具体问题。 (但是你错了不能用'String.replace()'来做到这一点 - 见HamZa的评论。) – ridgerunner

相关问题