Регулярное выражение javascript split - PullRequest
5 голосов
/ 18 июня 2010

Я пытаюсь создать разделение JavaScript в Regex, но я полностью застрял. Вот мой вклад:

9:30 pm
The user did action A.

10:30 pm
Welcome, user John Doe.

***This is a comment

11:30 am
This is some more input.

Я хочу, чтобы выходной массив после split () был (я удалил \n для удобства чтения):

["9:30 pm The user did action A.", "10:30 pm Welcome, user John Doe.", "***This is a comment", "11:30 am This is some more input." ];

Мое текущее регулярное выражение:

var split = text.split(/\s*(?=(\b\d+:\d+|\*\*\*))/);

Это работает, но есть одна проблема: временные метки повторяются в дополнительных элементах. Итак, я получаю:

["9:30", "9:30 pm The user did action A.", "10:30",  "10:30 pm Welcome, user John Doe.", "***This is a comment", "11:30", "11:30 am This is some more input." ];

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

Не могли бы вы помочь мне с Regex для этого?

Большое спасибо !!

РЕДАКТИРОВАТЬ: в ответ на Phleet

Это может выглядеть так:

9:30 pm
The user did action A.

He also did action B

10:30 pm Welcome, user John Doe.

По сути, после метки времени может быть или не быть новой строки, и может быть несколько новых строк для описания события.

1 Ответ

3 голосов
/ 18 июня 2010

Я считаю, что проблема связана с тем, как split в Javascript обрабатывает группы захвата. Решением может быть просто использование не захватывающей группы в вашем шаблоне. То есть вместо:

/\s*(?=(\b\d+:\d+|\*\*\*))/

Используйте

/\s*(?=(?:\b\d+:\d+|\*\*\*))/
        ^^

(?:___) - это то, что называется группой без захвата.

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

/\s*(?=\b\d+:\d+|\*\*\*)/

Ссылки


Малая точка

Вместо \*\*\* вы можете использовать [*]{3}. Это может быть более читабельным. * не является метасимволом внутри определения класса символов, поэтому его не нужно экранировать. {3} - это то, как вы обозначаете «ровно 3 повторения».

Ссылки

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