Regex: сопоставить что угодно, кроме группы - PullRequest
1 голос
/ 10 января 2020

У меня есть текст в следующем формате:

(delimiter)
111111
(delimiter)
222222
(delimiter)
333333
(delimiter)

Где (разделитель) - группа символов, а 111111,222222,333333 - произвольный текст, который не включает группу (разделитель).

Есть ли способ написать регулярное выражение типа "(разделитель) <<em> что угодно, кроме разделителя > (разделитель)"?

Я ожидаю захвата таких групп:

"(delimiter)
111111
(delimiter)",

"(delimiter)
222222
(delimiter)",

"(delimiter)
333333
(delimiter)"

Точнее говоря, в моем случае разделитель равен ([0-9]{1,2}[\s][A-z]+[\s][0-9]{4}[\s]) Я пытался использовать отрицательный взгляд так:

(([0-9]{1,2}[\s][A-z]+[\s][0-9]{4}[\s])(?!([0-9]{1,2}[\s][A-z]+[\s][0-9]{4}[\s]))([0-9]{1,2}[\s][A-z]+[\s][0-9]{4}[\s]))

Но, похоже, это не работает для меня.

1 Ответ

0 голосов
/ 11 января 2020

Вы можете использовать регулярное выражение в качестве разделителя в методе string split(). Он вернет все значения между разделителями.

let string = `12 Dec 2019
111111
13 Dec 2019
222222
14 Dec 2019
333333
15 Dec 2019
`;

let result = string.split(/\s*[0-9]{1,2}\s[A-Z]+\s[0-9]{4}\s/i);
console.log(result);

Я изменил [A-z] на [A-Z] и добавил модификатор i, чтобы сделать его без учета регистра. Также нет необходимости в [] вокруг \s.

...