我有一个字符串 "MySites"。我想在 My和 Sites之间放置一个空格。
"MySites"
My
Sites
我如何在 jQuery 或 JavaScript 中做到这一点?
这应该在每个大写字母之间插入一个没有大写字母的空格。
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 转换为常规形式的以下代码
newString
"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():
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]。
[a-z]
const str = "MySites"; str.replace(/(?<!^)([A-Z])/g, " $1"); // -> "My Sites"
您可以查看更多关于 (?<!^) 给你背后的外观。
(?<!^)
编辑:
增加了全局 /g标志,以便能够进行多重替换。
/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/
例子:
这是另一种可能性,非常紧凑
export function replaceCamelSpaces(colorName){ return colorName.replace(/\B([A-Z])\B/g, ' $1'); }
解释:
找到 B 大写的单词边界,为更多阅读 这个
([ A-Z ])找到零,一个或多个出现的上面的字母
和以前一样,但是在搜索的最后
/g 匹配以前匹配的所有情况
用。。。代替。。。。。。代替。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
一块钱
用一些字母(小写)和开头的空格代替