Javascript将"后的下一个字符大写Mc"
Javascript to capitalize the next char after " Mc"
给定一个像Marty Mcfly
这样的字符串,是否有一个正则表达式或其他一行解决方案来大写'f',所以我得到Marty McFly
?
我总是可以指望第一个和最后一个之间的空格,姓氏的第一个字母(即M)总是大写的。
我对任何javascript, jquery, regex解决方案都很开放,我只需要它简短而可爱。
我有一个方法,把字符串分开使用indexOf和substring但我希望有一个正则表达式或类似的东西
您可以利用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"
这是一个使用.replace()
回调的完美案例。
function fixMc(str) {
return(str.replace(/'bMc('w)/, function(match, p1) {
return(match.slice(0, -1) + p1.toUpperCase());
}));
}
这里有一个jsFiddle http://jsfiddle.net/jfriend00/Qbf8R/,您可以在几个不同的测试用例中看到它的作用。
通过解释回调的工作方式,参数match
是整个regex匹配,参数p1
是第一个括号组匹配的内容,回调返回您想要替换整个regex匹配的内容。
var text = 'Marty Mcfly';
text = text.replace(/Mc[a-z]/, function (k)
{
return 'Mc' + k[2].toUpperCase();
}
);
使用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"兼容的版本:
var name = 'Connor Macleod',
pattern = /'b(mc|mac)([a-z])/gi,
match = pattern.exec(name);
if (match) {
alert(name.replace(pattern, match[1] + match[2].toUpperCase()));
}
这是我能做的最好的:
'Marty Mcfly'.replace(/ mc([a-z])/i, function (str, $1) {return " Mc" + $1.toUpperCase()})
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- CKEditor如何允许href="javascript:void(0)"在小部件中
- Javascript将"后的下一个字符大写Mc"