簡體   English   中英

正則表達式分為大寫和第一位數

[英]Regex split on upper case and first digit

我需要將字符串"thisIs12MyString"拆分為一個看起來像[ "this", "Is", "12", "My", "String" ]

我已經到了"thisIs12MyString".split(/(?=[A-Z0-9])/)但它在每個數字上分裂並給出數組[ "this", "Is", "1", "2", "My", "String" ]

所以在單詞中我需要將字符串拆分為大寫字母和數字,而前面沒有另一個數字。

你在找這個嗎?

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

回報

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

正如我在評論中所說,我的方法是先在每個數字序列之前插入一個特殊字符作為標記

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

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

在這種情況下,您甚至可以在每個大寫字母前插入標記,並省略前瞻,使分割變得非常容易:

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

它可能會或可能不會更好。

在我的犀牛控制台中,

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

我想不出用RegEx實現這一目標的任何方法。

我想你需要在代碼中做到這一點。

請檢查URL,同一問題不同語言(ruby) - >

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

您可以使用當前正則表達式修復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;
    }

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM