JavaScript分割大写字母组成的字符串

158

如何在JavaScript中通过大写字母将字符串拆分为数组?

我想要将以下字符串进行拆分:

'ThisIsTheStringToSplit'

转换为

['This', 'Is', 'The', 'String', 'To', 'Split']

这可能对一些正在寻找解决此问题的人有所帮助:https://dev59.com/1W855IYBdhLWcg3wyneC#25732260 - Augusto Barreto
8个回答

338

我会使用.match()来实现这个功能,代码如下:

'ThisIsTheStringToSplit'.match(/[A-Z][a-z]+/g);

它将创建一个像这样的数组:

['This', 'Is', 'The', 'String', 'To', 'Split']

编辑:由于string.split()方法也支持正则表达式,因此可以这样实现

'ThisIsTheStringToSplit'.split(/(?=[A-Z])/); // positive lookahead to keep the capital letters

这也将解决评论中提到的问题:

"thisIsATrickyOne".split(/(?=[A-Z])/);

64
这将无法找到单个大写字母。我建议使用以下代码:"thisIsATrickyOne".match(/([A-Z]?[^A-Z]*)/g).slice(0,-1) - andrewmu
4
将可读的字符串转换回去,"thisIsATrickyOne".match(/([A-Z]?[^A-Z]*)/g).slice(0,-1).join(" ") 的结果是 this Is A Tricky One - Simon Hutchison

40
.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

这也应该处理数字... 在结尾的join将所有数组项连接成一个句子,如果这是你想要的

'ThisIsTheStringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

输出

"This Is The String To Split"

2
这很完美。但是使用它的人应该注意以下情况:'ThisIs8TheSt3ringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")将输出This Is 8 The St 3 To Split,忽略了3之后的小写字符串(ring)。 - Diablo

13

这里是您需要的 :)

var arr = UpperCaseArray("ThisIsTheStringToSplit");

function UpperCaseArray(input) {
    var result = input.replace(/([A-Z]+)/g, ",$1").replace(/^,/, "");
    return result.split(",");
}

9

这是我的解决方案,它快速、跨平台、不依赖编码,并且可以轻松地使用任何语言编写,而无需依赖。

var s1 = "ThisЭтотΨόυτÜimunəՕրինակPříkladדוגמאΠαράδειγμαÉlda";
s2 = s1.toLowerCase();
result="";
for(i=0; i<s1.length; i++)
{
 if(s1[i]!==s2[i]) result = result +' ' +s1[i];
 else result = result + s2[i];
}
result.split(' ');

1
这是一个不错的方法,将字符串转换为小写后再进行比较。 - Drenai

5

以下是一个处理数字、全部小写字母部分以及连续多个大写字母的答案:

const wordRegex = /[A-Z]?[a-z]+|[0-9]+|[A-Z]+(?![a-z])/g;
const string = 'thisIsTHEString1234toSplit';
const result = string.match(wordRegex);

console.log(result)


1
据我所知,这是最全面的答案。其他答案无法处理 "aStringABC123",而这个答案将返回 "a String ABC 123"。 - dgurns

1

这段代码将返回以下输出

const str = 'ThisIsTheStringToSplit';
str.split(/(?=[A-Z])/);

// It will print this output        
['This', 'Is', 'The', 'String', 'To', 'Split']

0

我是编程的新手,这是我解决它的方式,只使用JavaScript的基础知识,将变量声明为尽可能易于阅读的格式,请不要杀了我,如果它根本没有优化,刚开始学习编码呵呵 :)

  function solution(string) {

     let newStr = '';

     for( i = 0; i < string.length ; i++ ) {
       const strOriginal = string[i];
       const strUpperCase = string[i].toUpperCase();

       if( strOriginal === strUpperCase) {
         newStr = newStr + ' ' + strOriginal;
       } else {
         newStr = newStr + strOriginal;
       }

     }

     return console.log(newStr);

   }


   solution('camelCasing');

-1
string DemoStirng = "ThisIsTheStringToSplit";
            for (int i = 0; i < DemoStirng.Length; i++) {
                if (i != 0)
                {
                    if ((int)DemoStirng[i] <= 90 && (int)DemoStirng[i] >= 65)
                    {
                        var aStringBuilder = new StringBuilder(DemoStirng);
                        aStringBuilder.Insert(i, ",");
                        DemoStirng = aStringBuilder.ToString();
                        i++;
                    }
                }
            }
            string[] words = DemoStirng.Split(',');

2
这个问题被标记为JavaScript,但是这个答案不是用JavaScript编写的。 - AdamExchange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接