正则表达式分为大写和第一位数

时间:2012-02-26 13:20:17

标签: javascript regex

我需要将字符串"thisIs12MyString"拆分为类似[ "this", "Is", "12", "My", "String" ]

的数组

我已经到了"thisIs12MyString".split(/(?=[A-Z0-9])/),但是它会在每个数字上分开并给出数组[ "this", "Is", "1", "2", "My", "String" ]

所以在单词中我需要将字符串拆分为大写字母和数字,而不是前面有另一个数字。

5 个答案:

答案 0 :(得分:9)

你在找这个吗?

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

返回

["this", "Is", "12", "My", "String"]

答案 1 :(得分:3)

正如我在评论中所说,我的方法是首先在每个数字序列之前插入一个特殊字符,作为标记

"thisIs12MyString".replace(/\d+/g, '~$&').split(/(?=[A-Z])|~/)

其中~可以是任何其他字符,最好是不可打印的字符(例如控制字符),因为它不太可能在字符串中“自然地”出现。

在这种情况下,您甚至可以在每个大写字母前插入标记,并省略前瞻,使分割变得非常简单:

"thisIs12MyString".replace(/\d+|[A-Z]/g, '~$&').split('~')

它可能会或可能不会表现得更好。

答案 2 :(得分:1)

在我的rhino控制台中,

js> "thisIs12MyString".replace(/([A-Z]|\d+)/g, function(x){return " "+x;}).split(/ /);
this,Is,12,My,String
另一个,

js> "thisIs12MyString".split(/(?:([A-Z]+[a-z]+))/g).filter(function(a){return  a;});
this,Is,12,My,String

答案 3 :(得分:0)

我无法想到用RegEx实现这一目标的任何方法。

我认为您需要在代码中执行此操作。

请检查网址,同一问题不同的语言(红宝石) - >

代码位于底部:   http://code.activestate.com/recipes/440698-split-string-on-capitalizeduppercase-char/

答案 4 :(得分:0)

您可以使用当前正则表达式修复JS缺少使用当前正则表达式进行数组拆分的外观。
快速伪代码:

var result = [];
var digitsFlag = false;
"thisIs12MyString".split(/(?=[A-Z0-9])/).forEach(function(word) {

    if (isSingleDigit(word)) {
        if (!digitsFlag) {
            result.push(word);
        } else {
            result[result.length - 1] += word;
        }
        digitsFlag = true;
    } else {
        result.push(word);
        digitsFlag = false;
    }

});