ChatGPT解决这个技术问题 Extra ChatGPT

在大写字母前插入空格

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

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

你能提供更多细节吗?您要分离的字符串的一般形式是什么?如果只有那一个字符串,为什么不手动输入空格呢?
请更准确,我认为没有人能理解你在问什么
定义它应该匹配的模式,例如“在字符串中找到'My'时的空格”或“在每个大写字符之前添加一个空格,除非它是第一个字符”,或者......
“我的站点之间”。你怎么能在 1 件事之间放置一个空格?我假设您想要“我的网站”作为输出。
#meagar——好评论(讽刺)。你没有教过,如果你没有什么好说的,就什么也别说吗?

u
user2051552

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

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

这也适用于“1AndAbove”。另一个解决方案没有。谢谢!!
它对首字母缩略词“失败”,我们如何防止它在 2 个或更多连续大写字母时起作用?
@ToniMichelCaubet 简单,像这样修改正则表达式:/([A-Z]+)/g。 + 将确保您匹配尽可能多的连续大写字母。
为什么在此代码中需要用括号括住“[AZ]”?
@Kristina 括号说“我是一个变量”。没有括号,它会为“MySites”生成答案“$1y $1ites”
a
abe312

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

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

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

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

只是一个警告,单个字母“ThisIsATest”失败将导致“This Is ATest”。
@Ceres:好点。可以通过在不是第一个字符的任何大写字母之前插入一个空格来处理这种情况,但是您仍然有些情况在没有单词识别的情况下无法处理,例如 "RunThisSQLQuery"
对于“ThisIsATest”——(不包括“RunThisSQLQuery”)你可以这样做:str.replace(/([AZ])/g, '$1').trim()
杰出的!谢谢!
J
JosephGarrone

我是否可以建议对当前接受的答案进行轻微修改:

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


这非常适合我所需要的。它完美地在大写字母之间添加了一个空格,但将首字母缩略词保持在一起。
T
Thomas Stein

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

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” -> “我的真棒字符串”


至于现在, substr() 已经被弃用了,这种方法还有其他选择吗?
C
Community

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

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(); })

A
Adam Straughan

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

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

http://jsfiddle.net/uXy64/


C
Carmine Tambascia

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

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

解释:

\B 要查找的大写单词边界,更多请阅读 this

([AZ]) 找到零个、一个或多个大写字母

\B 和以前一样,但在搜索结束时

/g 匹配先前匹配的所有出现

用。。。来代替

'$1'

用一些字母(lowacase)和开头的空格替换


L
Luca Kiebel

您可以使用 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());


J
Jose Da Silva

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

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

您可以查看有关 (?<!^) here 背后外观的更多信息。