Javascript将"Mc"之后的下一个字符大写

kas*_*ega 8 javascript regex jquery

给定一个字符串就像Marty Mcfly有一个正则表达式或其他一行解决方案来大写'f'所以我得到了Marty McFly

我总是可以指望第一个和最后一个之间的空格,而姓氏的第一个字母(即M)将始终是大写字母.

我对任何javascript,jquery,正则表达式解决方案都非常开放,我只需要简短而甜蜜.

我有一个方法,使用indexOf和substring将字符串分开,但我希望有一个正则表达式或类似的东西.

mae*_*ics 8

您可以利用其形式String.replace将函数作为其第二个参数:

function fixMarty(s) {
  return (""+s).replace(/Mc(.)/g, function(m, m1) {
    return 'Mc' + m1.toUpperCase();
  });
}
fixMarty('Marty Mcfly'); // => "Marty McFly"
fixMarty("Mcdonald's"); // => "McDonald's"
Run Code Online (Sandbox Code Playgroud)


jfr*_*d00 6

这是使用回调的完美案例.replace().

function fixMc(str) {
    return(str.replace(/\bMc(\w)/, function(match, p1) {
        return(match.slice(0, -1) + p1.toUpperCase());
    }));
}
Run Code Online (Sandbox Code Playgroud)

这里有一个jsFiddle http://jsfiddle.net/jfriend00/Qbf8R/,你可以在几个不同的测试用例中看到它.

通过解释回调如何工作,参数match是整个正则表达式匹配,参数p1是第一个带括号的组匹配的,回调返回你想要用整个正则表达式匹配的内容.