我有一个字符串"MySites"
。我想在My
和Sites
之间放置一个空格。
我如何在jQuery或JavaScript中执行此操作?
答案 0 :(得分:115)
这将找到每个小写字符后跟一个大写字符,并在它们之间插入一个空格:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
对于出现2个连续大写字母的特殊情况(例如:ThisIsATest),请在下面添加其他代码:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
答案 1 :(得分:112)
您可以在每个大写字符前添加一个空格,并修剪前导和尾随空格
s = s.replace(/([A-Z])/g, ' $1').trim()
答案 2 :(得分:16)
我可以建议对当前接受的答案进行轻微修改:
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
如果您正在处理数据库列名称(并且正在使用首字母缩写词来处理某些事情),这可能会稍微有用一些。
答案 3 :(得分:6)
这应该在每个大写字母之间插入一个空格,该大写字母前面没有大写字母。
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(); })
答案 4 :(得分:5)
正则表达式查找小写 - 大写边界然后插入空格
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
答案 5 :(得分:1)
您可以使用String#split()
和大写字母([A-Z]
)的预读,然后使用空格将数组Array#join()
{1}}:
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());
答案 6 :(得分:0)
在单个正则表达式中替换(没有修饰或连接),允许任何字符而不只是字母[a-z]
或[A-Z]
。
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
您可以详细了解(?<!^)
here的外观。
答案 7 :(得分:0)
这是我根据以下一些答案最终用来将字符串转换为大写形式的原因:
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/
示例: