Разделить строку, включая совпадение с регулярным выражением - PullRequest
1 голос
/ 13 января 2012

Я анализирую текст с помощью JavaScript. Допустим, у меня есть строка:

"hello wold <1> this is some random text <3> foo <12>"

Мне нужно поместить в массив следующие подстроки:

myArray[0] = "hello world ";
myArray[1] = "<1>";
myArray[2] = " this is some random text ";
myArray[3] = "<3>";
myArray[4] = " foo ";
myArray[5] = "<12>";

Обратите внимание, что я разбиваю строку всякий раз, когда сталкиваюсь с последовательностью <"number">

Я попытался разбить строку с помощью регулярного выражения /<\d{1,3}>/, но когда я это сделал, я потерял последовательность <"number">. Другими словами, я получаю слова «hellow world», «это какой-то случайный текст», «foo». Обратите внимание, что я теряю строки "<1>", "<3>" и "<12>", я хотел бы сохранить это. Как я смогу решить эту проблему?

1 Ответ

11 голосов
/ 13 января 2012

Вам нужно захватить последовательность, чтобы сохранить ее.

var str = "hello wold <1> this is some random text <3> foo <12>"

str.split(/(<\d{1,3}>)/);

// ["hello wold ", "<1>", " this is some random text ", "<3>", " foo ", "<12>", ""]

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

var str = "hello wold <1> this is some random text <3> foo <12>",    
    re = /<\d{1,3}>/g,
    result = [],
    match,
    last_idx = 0;

while( match = re.exec( str ) ) {
   result.push( str.slice( last_idx, re.lastIndex - match[0].length ), match[0] );

   last_idx = re.lastIndex;
}
result.push( str.slice( last_idx ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...