我有一个字符串 "MySites"
。我想在 My
和 Sites
之间放置一个空格。
如何在 jQuery 或 JavaScript 中做到这一点?
您可以在每个大写字符之前添加一个空格并修剪前导和尾随空格
s = s.replace(/([A-Z])/g, ' $1').trim()
这将找到每个出现的小写字符后跟一个大写字符,并在它们之间插入一个空格:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
对于出现 2 个连续大写字母的特殊情况(例如:ThisIsATest),请在下面添加附加代码:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
。
我是否可以建议对当前接受的答案进行轻微修改:
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 列名,这可能会稍微有用一些(并且在某些事情上使用首字母缩写词)
根据这里的一些答案,这是我最终用来将字符串转换为标题大小写的方法:
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" -> "你的字符串"
"AnotherStringHere" -> "这里的另一个字符串"
“someones_string” -> “Someones 字符串”
“这里的另一个字符串”->“这里的另一个字符串”
“myAWESOMEString” -> “我的真棒字符串”
这应该在每个前面没有大写字母的大写字母之间插入一个空格。
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 要查找的大写单词边界,更多请阅读 this
([AZ]) 找到零个、一个或多个大写字母
\B 和以前一样,但在搜索结束时
/g 匹配先前匹配的所有出现
用。。。来代替
'$1'
用一些字母(lowacase)和开头的空格替换
您可以使用 String#split()
和大写字母 ([A-Z]
) 的前瞻,然后使用空格 Array#join()
数组:
让 stringCamelCase = "我的网站";让 string = stringCamelCase.split(/(?=[AZ])/).join(" ");控制台日志(字符串)
或者,作为字符串对象函数:
String.prototype.cC2SC = function() { return this.split(/(?=[AZ])/).join(" "); } console.log("MyCamelCase".cC2SC());
在单个正则表达式替换(没有修剪或连接)中,它允许任何字符,而不仅仅是字母 [a-z]
或 [A-Z]
。
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
您可以查看有关 (?<!^)
here 背后外观的更多信息。
/([A-Z]+)/g
。 + 将确保您匹配尽可能多的连续大写字母。