2016-03-27 2 views
1

Возможно, этот вопрос, или тот, который требует аналогичного ответа, уже был задан, но я не смог его найти. Если это так, ссылка на него можно удалить.Regex/Javascript; отрицательно выберите повторение двух символов

У меня нормально с регулярным выражением, когда я могу использовать его (и это имеет смысл), но я не понимаю, что это простая проблема. Я ищу через уменьшенную файл CSS с частями, которые ищут так:

@media screen and (max-width:1234px){.some{thing:else;}.more{text:stuff;}} 

Я ищу «захватить» правила стиля внутри запросов СМИ. Регулярного выражения у меня есть следующее:

/@media[^\{]+\{([^\}]+\})/ 

Каким будет выбрать для «.Некоторых {вещи: еще;}», но он остановится, как только он достигнет первого „}“. Я хочу выбрать в регулярном выражении НЕ два}} символа. Поэтому выберите все, пока не достигнете двух}} charaters. Вы можете выбрать для них, как это [\}]{2}, но как вы отрицательно выбираете для двух одинаковых символов вместе?

Некоторая помощь?

ответ

0

Почему бы не просто повторить захваченной группы:

@media[^\{]+\{((?:[^\}]+\})+)

Demo here.

+0

Как-то я нахожу это решение более удобным для чтения, но я предполагаю, что другой является более общим. Я не знал, что вы могли бы повторить группу ... dono, почему я думал, что ... ty – Sl4rtib4rtf4st

+0

Попробовав оба варианта более интенсивно (был занят), я заметил, что другой ответ не делает то, что я бы хотел do, параметр '. +' выбирает столько, сколько может (что является официальным термином «жадный»?), и я хочу, чтобы противоположность опции '[^ \}] +' делала то, что я хочу, и не более того. – Sl4rtib4rtf4st

0
@media[^{]*{((?:.*?{.*?})*)} 

См DEMO

+0

Я думаю, это решение, которое я ищу, хотя меня не интересуют хиты, если они пустые, поэтому я использовал '+' вместо '*'. ty – Sl4rtib4rtf4st

+0

Как я уже сказал в комментарии к другому ответу, добавление второго '. +' в части '(?:. *? {. *?}) *' заставляет регулярное выражение выбирать все, кроме всего, это «жадный». – Sl4rtib4rtf4st

Смежные вопросы