Как разбить строку по разнице в символе в качестве разделителя? - PullRequest
3 голосов
/ 15 октября 2011

Чего я хотел бы добиться, так это разделить строку следующим образом: разделители - это индексы, в которых символ перед этим индексом отличается от символа после этого индекса:

"AAABBCCCCDEEE" -> ["AAA", "BB", "CCCC", "D", "EEE"]

пытался найти краткое решение, но в итоге я получил довольно подробный код: http://jsfiddle.net/b39aM/1/.

var arr = [],               // output
    text = "AAABBCCCCDEEE", // input
    current;

for(var i = 0; i < text.length; i++) {
    var char = text[i];

    if(char !== current) { // new letter
        arr.push(char);    // create new array element
        current = char;    // update current
    } else {                         // current letter continued
        arr[arr.length - 1] += char; // append letter to last element
    }
}

Это наивно и мне не нравится:

  • Я вручную перебираю каждый символ и добавляю к массиву символ за символом
  • Это слишком много для простой вещи, которую я хочу достичь

Я былдумаю об использовании регулярного выражения, но я не уверен, каким должно быть регулярное выражение.Можно ли определить регулярное выражение, которое означает «один символ и другой символ после»?

Или, в более общем смысле, есть ли более элегантное решение для достижения этого метода расщепления?

1 Ответ

6 голосов
/ 15 октября 2011

Да, вы можете использовать регулярное выражение:

"AAABBCCCCDEEE".match(/(.)\1*/g)

Здесь . будет соответствовать любому символу, а \1* будет соответствовать любым следующим символам, которые совпадают с ранее подобранными.И с глобальным соответствием вы получите все соответствующие последовательности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...