Учитывая этот текст:JS: соответствующие записи с группами захвата, учета новых линий
1/12/2011
I did something.
10/5/2013
I did something else.
Here is another line.
And another.
5/17/2014
Lalala.
More text on another line.
Я хотел бы использовать регулярное выражение, чтобы получить это (или, возможно, некоторые другие средства?):
["1/12/2011", "I did something.", "10/5/2013", "I did something else.\n\nHere is another line.\n\nAnd another.", "5/17/2014", "Lalala.\nMore text on another line."]
дата часть и содержание часть каждый отдельный запись, чередующийся.
Я попытался использовать [^] вместо точки, поскольку JS. * Не соответствует новым строкам (как говорит Matching multiline Patterns), но тогда совпадение является жадным и занимает слишком много, поэтому в результирующем массиве только 1 запись:
var split_pattern = /\b(\d\d?\/\d\d?\/\d\d\d\d)\n([^]+)/gm;
var array_of_mems = contents.match(split_pattern);
// => ["1/12/2011↵I did something else..."]
Если добавить знак вопроса, чтобы получить [^] + ?, которая согласно How to make Regular expression into non-greedy? делает матч не жадный, то я получаю только первый символ части контента.
Какой лучший метод? Заранее спасибо.
Могу ли я получить некоторое пояснение к регулярному выражению - как работает [\ d /] +? И, похоже, ключевая идея - использовать [\ S \ s] ... что это такое? Или просто ключевые моменты в регулярном выражении в целом, так как я хотел бы понять это, а не просто просто копировать его. Я посмотрю на?: И?! Я не думаю, что это не захватывающий grouop & negative lookahead ... это ключевые идеи, которые я не рассматривал при попытке написать собственное регулярное выражение. Благодаря! – dmonopoly
@ dmonopoly, посмотрите http://www.rexegg.com/regex-disambiguation.html – hwnd