Ruby RegExp - сопоставить все селекторы и директивы CSS - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь сопоставить все селекторы и директивы CSS, приведенные ниже, за исключением любых комментариев и любых медиазапросов.

a {color: red !important;}

#p1 {
        margin-top: 20px !important
      }

/* Client-specific styles */

      .ExternalClass,  
      .ExternalClass p,  
      .ExternalClass span,  
      .ExternalClass font,  
      .ExternalClass td,  
      .ExternalClass div {
        line-height: 100%;
      }

a {}

@media query {
    a { display:none }  
}

У меня есть следующий RegEx: [a-zA-Z#.:*]{1}[^\/*]+?{[\s\S]*?}.Это соответствует всему правильно, но включает @media query.Я пытался использовать отрицательный взгляд, например, (?!.+@media.+), но это не помогло.

Что я могу сделать, чтобы извлечь только селекторы / директивы?

Пример: https://regex101.com/r/JmjthP/3

Решение

С помощью @Wiktor Stribiżew рабочее решение было таким:

/^(?!.*@media)[\t ]*([a-zA-Z#.:*\[][^{\/]*\s*){[\s\S]*?}/

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете использовать

^(?!.*@media) *[a-zA-Z#.:*][^{]*{[\s\S]*?}

См. Демоверсию regex

Подробности

  • ^- начало строки
  • (?!.*@media) - не допускается @media после любых 0+ символов, кроме символов перевода строки
  • * - 0+ пробелов
  • [a-zA-Z#.:*] - письмо, #, ., : или *
  • [^{]* - ноль или более символов, отличных от {
  • { - a{ char
  • [\s\S]*? - 0+ символов, как можно меньше.
  • } - } char
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...