在大写字母前插入空格

我有一个字符串 "MySites"。我想在 MySites之间放置一个空格。

我如何在 jQuery 或 JavaScript 中做到这一点?

105566 次浏览

这应该在每个大写字母之间插入一个没有大写字母的空格。

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将具有所需的值。另外,如果希望使用正则表达式缩短代码,可以使用来自 将 camelCase 转换为常规形式的以下代码

"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })

这将发现每个小写字符后跟一个大写字符,并在它们之间插入一个空格:

s = s.replace(/([a-z])([A-Z])/g, '$1 $2');

对于连续出现两个大写字母的特殊情况(例如: ThisIsATest) ,请在下面添加额外代码:

 s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');

正则表达式查找小写-大写边界,然后插入一个空格

<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );

Http://jsfiddle.net/uxy64/

您只需在每个大写字母前面添加一个空格,并修剪掉前面和后面的空格即可

s = s.replace(/([A-Z])/g, ' $1').trim()

我建议稍微修改一下目前公认的答案:

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

如果处理的是 db 列名(并且在某些情况下使用首字母缩略词) ,那么它可能稍微有用一些

你可以使用 String#split()和大写字母表([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());

在一个单独的正则表达式替换(没有修剪或连接) ,允许任何字符不只是字母 [a-z][A-Z]

const str = "MySites";
str.replace(/(?<!^)([A-Z])/g, " $1"); // -> "My Sites"

您可以查看更多关于 (?<!^) 给你背后的外观。

编辑:

增加了全局 /g标志,以便能够进行多重替换。

下面是我最后用来将字符串转换为标题格式的方法,基于这里的一些答案:

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/


例子:

  • “ yourStringHere”-> “ Your String Here”
  • “ Another StringHere”-> “ Another String Here”
  • “ someone _ String”-> “ someone String”
  • “这里的另一根线”-> “这里的另一根线”
  • “ myAWESOMEString”-> “ My AWESOMEString”

这是另一种可能性,非常紧凑

export function replaceCamelSpaces(colorName){
return colorName.replace(/\B([A-Z])\B/g, ' $1');
}

解释:

找到 B 大写的单词边界,为更多阅读 这个

([ A-Z ])找到零,一个或多个出现的上面的字母

和以前一样,但是在搜索的最后

/g 匹配以前匹配的所有情况

用。。。代替。。。。。。代替。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

一块钱

用一些字母(小写)和开头的空格代替