在大写字母前插入空格

IT技术 javascript jquery regex string replace
2021-02-24 17:39:01

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

我怎样才能在 jQuery 或 JavaScript 中做到这一点?

6个回答

您可以在每个大写字符之前添加一个空格并修剪前导和尾随空格

s = s.replace(/([A-Z])/g, ' $1').trim()
这也适用于“1AndAbove”。另一个解决方案没有。谢谢!!
2021-04-29 17:39:01
@ToniMichelCaubet容易,修改这样的正则表达式:/([A-Z]+)/g+ 将确保您匹配尽可能多的连续大写字母。
2021-05-02 17:39:01
为什么在此代码中需要用于将“[AZ]”括起来的括号?
2021-05-04 17:39:01
它对首字母缩略词“失败”,我们如何防止它在 2 个或更多连续大写字母时起作用?
2021-05-08 17:39:01
@Kristina 括号里写着“我是一个变量”。如果没有括号,它会为“MySites”生成答案“$1y $1ites”
2021-05-11 17:39:01

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

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

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

 s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
对于“ThisIsATest”——(不计算“RunThisSQLQuery”)你可以这样做: str.replace(/([AZ])/g, ' $1').trim()
2021-04-21 17:39:01
@Ceres:好点。可以通过在不是第一个字符的任何大写字母之前插入一个空格来处理这种情况,但是您仍然有一些情况如果没有单词识别就无法处理,例如"RunThisSQLQuery".
2021-04-22 17:39:01
只是一个警告,对于单个字母“ThisIsATest”失败将导致“This Is ATest”。
2021-05-02 17:39:01
杰出的!谢谢!
2021-05-19 17:39:01

我是否可以建议对当前接受的答案稍作修改:

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 列名,这可能会更有用(并且在某些事情上使用首字母缩略词)

这非常适合我所需要的。它完美地在大写字母之间添加了一个空格,但将首字母缩略词保持在一起。
2021-05-12 17:39:01

根据这里的一些答案,这是我最终用来将字符串转换为标题大小写的内容:

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会有你想要的value。此外,如果您想使用正则表达式缩短代码,您可以使用以下代码从Javascript camelCase 到正则形式

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