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

Выражение регулярного выражения не захватывает последнюю закрывающую скобку и останавливается на первой закрывающей скобке.

Запуск выражения регулярного выражения:

@media.*(\{([^{}]|(?R))*\})

Не захватывает получение второй скобки.

@media screen and (min-width:750px){h1{font-size:2.5em}
  test
 } //doesn't capture
}

Не стесняйтесь попробовать это здесь: https://regex101.com/r/lF0fI1/457

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

1 Ответ

0 голосов
/ 16 октября 2019

Ваша проблема одна

@media.*            

.* по своей природе жадная, так что она максимально соответствует тому, что вам нужно, чтобы сделать ее ленивой, добавив ? или используя [^\{]*

Во-вторых, вы должны использовать numbered recursive regex (?1), потому что (?R) повторяет полное выражение, но вам нужен повторяющийся шаблон

Regex Demo

...