Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript将“后一个字符大写”;Mc";_Javascript_Jquery_Regex - Fatal编程技术网

Javascript将“后一个字符大写”;Mc";

Javascript将“后一个字符大写”;Mc";,javascript,jquery,regex,Javascript,Jquery,Regex,给定一个字符串,如martymcfly,是否有正则表达式或其他单行解决方案来大写“f”,因此我得到martymcfly 我总是可以依靠第一个和最后一个之间的空格,姓氏的第一个字母(即M)总是大写 我对任何javascript、jquery、regex解决方案都非常开放,我只需要它简短而甜美 我有一个方法可以使用indexOf和substring将字符串分开,但我希望有一个regex或类似的方法。使用regex的exec方法和string的replace方法的组合: var name = 'Mar

给定一个字符串,如
martymcfly
,是否有正则表达式或其他单行解决方案来大写“f”,因此我得到
martymcfly

我总是可以依靠第一个和最后一个之间的空格,姓氏的第一个字母(即M)总是大写

我对任何javascript、jquery、regex解决方案都非常开放,我只需要它简短而甜美


我有一个方法可以使用indexOf和substring将字符串分开,但我希望有一个regex或类似的方法。

使用regex的
exec
方法和string的
replace
方法的组合:

var name = 'Marty Mcfly',
    pattern = /\bmc([a-z])/gi,
    match = pattern.exec(name);

if (match) {
    alert(name.replace(pattern, 'Mc' + match[1].toUpperCase()));
}
下面是一个与“Mac”兼容的版本:


您可以利用
字符串的形式。replace
将函数作为其第二个参数:

功能修复{
返回(“+s).替换(/Mc(.)/g,函数(m,m1){
返回'Mc'+m1.toUpperCase();
});
}
fixMarty('Marty Mcfly');//=>“马蒂·麦克弗利”
fixMarty(“麦当劳”);//=>“麦当劳”

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

这里是一个JSFIDLE,您可以在几个不同的测试用例中看到它的实际应用


为了解释回调函数的工作原理,参数
match
是整个正则表达式匹配,参数
p1
是第一个括号中的组匹配的,回调函数返回要替换整个正则表达式匹配的内容。

以下是我能做的最好的事情:

var text = 'Marty Mcfly';
text = text.replace(/Mc[a-z]/, function (k)
    {
      return 'Mc' + k[2].toUpperCase();
    }
  );
'Marty Mcfly'.replace(/ mc([a-z])/i, function (str, $1) {return  " Mc" + $1.toUpperCase()})

它也需要为Mac工作吗?奥康纳等呢?德维尔?把奥康纳和迪思比较一下。你的范围是什么?好问题。是的,如果它能在mac电脑上运行就好了。我已经用另一个正则表达式覆盖了o'conner etal。没有想到DeVille,但我不知道除了任何以“De”开头的名字之外,你会怎么分辨出来,这样我们就可以在没有它的情况下生存下来。+1表示友好的跨平台正则表达式问题+对于你的第一个答案…如果我错了,请纠正我,但第二个答案会被“Shane Mack”这样的名字搞砸,对吗?我们决定接受这样的小怪癖,我们只想抓住一些主要的东西。谢谢你花时间回复。我从没想过要用这样的切片。谢谢
var text = 'Marty Mcfly';
text = text.replace(/Mc[a-z]/, function (k)
    {
      return 'Mc' + k[2].toUpperCase();
    }
  );
'Marty Mcfly'.replace(/ mc([a-z])/i, function (str, $1) {return  " Mc" + $1.toUpperCase()})