Как сопоставить группу шаблонов регулярных выражений для фиксированного времени? - PullRequest
1 голос
/ 05 апреля 2019

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

Мой журнал -

[Mon Feb 27 15:40:12.341031 2017] [auth_digest:notice] [pid 2420:tid 332] [AH01757: generating secret for digest authentication ...]

Мой рисунок-

([^\[\]]+)

Вышеуказанный pattersn может соответствовать всем, однако я просто хочу сгруппировать только первые 2, т.е. [Пн 27 февраля 15: 40: 12.341031 2017] [auth_digest: note]

Что-то вроде -

([^\[\]]+){2}

Отдельные символы или слова работают, например, с помощью (abc) {2}, но как насчет группы? Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

В вашем шаблоне ([^\[\]]+) используется класс отрицательных символов, который не соответствует [ и ] и не учитывает структуру открывающих и закрывающих скобок.

Повторяет его с {2}повторяет группу и приводит к совпадению и группе захвата, в которой группа содержит совпадение последней итерации.

Если вы хотите 2 совпадения с начала строки, вы можете использовать якорь ^чтобы подтвердить начало строки и использовать 2 группы захвата с пробелом между соответствующими (\[[^]]+\]), который будет включать в себя открывающие и закрывающие квадратные скобки.

^(\[[^]]+\]) (\[[^]]+\])

Regex demo

0 голосов
/ 05 апреля 2019

Попробуйте это. Вам просто нужно обработать один дополнительный пробел в конце.

const str = "[Mon Feb 27 15:40:12.341031 2017] [auth_digest:notice] [pid 2420:tid 332] [AH01757: generating secret for digest authentication ...]";


const regex = /(?:\[.+?\] ){2}/;
console.log(str.match(regex));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...