我一直在尝试使用 JavaScript regex 命令将类似的内容"thisString"
转换为,"This String"
但我得到的最接近的是替换一个字母,导致类似"Thi String"
或"This tring"
. 有任何想法吗?
为了澄清我可以处理一个大写字母的简单,我只是不与正则表达式强,拆分"somethingLikeThis"
成"something Like This"
是在那里我遇到麻烦了。
我一直在尝试使用 JavaScript regex 命令将类似的内容"thisString"
转换为,"This String"
但我得到的最接近的是替换一个字母,导致类似"Thi String"
或"This tring"
. 有任何想法吗?
为了澄清我可以处理一个大写字母的简单,我只是不与正则表达式强,拆分"somethingLikeThis"
成"something Like This"
是在那里我遇到麻烦了。
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
显示
This String Is Good
我对此有兴趣,尤其是在处理大写字母序列方面,例如在 xmlHTTPRequest 中。列出的函数会产生“Xml HTTP 请求”或“Xml HTTPRequest”,我的会产生“Xml HTTP 请求”。
function unCamelCase (str){
return str
// insert a space between lower & upper
.replace(/([a-z])([A-Z])/g, '$1 $2')
// space before last upper in a sequence followed by lower
.replace(/\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
}
gist 中还有一个 String.prototype 版本。
这可以通过 regex lookahead ( live demo )简洁地完成:
function splitCamelCaseToString(s) {
return s.split(/(?=[A-Z])/).join(' ');
}
(我认为g
(全局)标志是必要的,但奇怪的是,它不是在这种特殊情况下。)
split
如果您需要处理 UpperCamelCase,则使用 Lookahead with可确保不消耗匹配的大写字母并避免处理前导空格。要将每个字母的首字母大写,您可以使用:
function splitCamelCaseToString(s) {
return s.split(/(?=[A-Z])/).map(function(p) {
return p.charAt(0).toUpperCase() + p.slice(1);
}).join(' ');
}
该map
阵列方法是ES5功能,但你仍然可以使用它在旧的浏览器从MDC一些代码。或者,您可以使用循环遍历数组元素for
。
我认为这应该能够处理连续的大写字符以及简单的驼峰式。
例如:someVariable => someVariable,但是 ABCCode != ABC Code。
下面的正则表达式适用于您的示例,也是在 camcelCase 中表示缩写的常见示例。
"somethingLikeThis"
.replace(/([a-z])([A-Z])/g, '$1 $2')
.replace(/([A-Z])([a-z])/g, ' $1$2')
.replace(/\ +/g, ' ') => "something Like This"
"someVariableWithABCCode"
.replace(/([a-z])([A-Z])/g, '$1 $2')
.replace(/([A-Z])([a-z])/g, ' $1$2')
.replace(/\ +/g, ' ') => "some Variable With ABC Code"
您也可以按上述方式调整以大写第一个字符。
function spacecamel(s){
return s.replace(/([a-z])([A-Z])/g, '$1 $2');
}
spacecamel('somethingLikeThis')
// 返回值:像这样的东西