我有一个字符串"MySites"
,我想在My
和Sites
之间加上一个空格。
在jQuery或JavaScript中怎样做呢?
我有一个字符串"MySites"
,我想在My
和Sites
之间加上一个空格。
在jQuery或JavaScript中怎样做呢?
你可以在每个大写字母前添加一个空格,并去掉开头和结尾的空格。
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
。加号可以确保匹配尽可能多的连续大写字母。 - iFreilicht这将找到每个小写字符后面的大写字符,并在它们之间插入一个空格:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
对于当连续出现2个大写字母的特殊情况(例如:ThisIsATest),请在下面添加额外的代码:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
我可以建议对当前接受的答案进行一些小的修改:
function insertSpaces(string) {
string = string.replace(/([a-z])([A-Z])/g, '$1 $2');
string = string.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
return string;
}
这意味着:
ACROText -> ACRO Text
UserNameTest -> User Name Test
如果您在处理数据库列名(并且在某些情况下使用缩写),这可能会更有用一些。
这是我最终使用的代码,将字符串转换为标题大小写,基于这里的一些答案:
str = str
.replace(/(_|-)/g, ' ')
.trim()
.replace(/\w\S*/g, function(str) {
return str.charAt(0).toUpperCase() + str.substr(1)
})
.replace(/([a-z])([A-Z])/g, '$1 $2')
.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
这是一个 JSFiddle,在这里您可以测试您的字符串以查看是否符合您的需求:
https://jsfiddle.net/thomastasa/5236dv8t/85/示例:
var myString = "MySites"
var newString = "";
var wasUpper = false;
for (var i = 0; i < myString.length; i++)
{
if (!wasUpper && myString[i] == myString.toUpperCase()[i])
{
newString = newString + " ";
wasUpper = true;
}
else
{
wasUpper = false;
}
newString = newString + myString[i];
}
newString
将会拥有你想要的值。此外,如果你想使用正则表达式缩短你的代码,你可以使用来自Javascript camelCase to Regular Form的以下代码。
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
正则表达式用于查找小写字母和大写字母之间的边界,然后插入一个空格。
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
export function replaceCamelSpaces(colorName){
return colorName.replace(/\B([A-Z])\B/g, ' $1');
}
解释:
\B 是大写单词边界,用于查找,更多信息请阅读这里
([A-Z]) 查找零个、一个或多个大写字母的出现次数
\B 与之前一样,但在搜索结束时使用
/g 匹配所有先前匹配的出现次数
替换为
' $1'
以某个字母(小写)和空格开头替换
[a-z]
或[A-Z]
。const str = "MySites";
str.replace(/(?<!^)([A-Z])/g, " $1"); // -> "My Sites"
(?<!^)
的用法。/g
以进行多次替换。g
标志,正则表达式也将适用于相邻的大写字母。'ThisIsATest'.replace(/(?<!^)([A-Z])/g, ' $1') === 'This Is A Test' - Nitsan BenHanochString#split()
方法以及正则表达式中的预查(look-ahead)来匹配大写字母([A-Z]
),然后用空格将数组拼接起来,最终得到结果。请参考Array#join()
方法。
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());