У меня нет проблем с регулярным выражением, а скорее с захватом данных. Поскольку элементы CSS, как правило, состоят из нескольких строк, мне нужно выяснить, как создать массив между {и} с каждым переводом строки в качестве разделителя для элементов списка.
Нет, нет.
Для указанной выше задачи интересующими будут только строки, содержащие либо имя класса, либо определение цвета, а также, возможно, также строки, содержащие }
для обозначения конца класса. Все остальные строки можно игнорировать, поэтому нет необходимости помещать их в массив.
Поскольку спецификации классов не могут быть вложенными [1], последний увиденный набор имен классов всегда будет активным набором классов. Следовательно, вам нужно записать только последний увиденный набор имен классов и, при обнаружении спецификации цвета, распечатать эти имена классов.
Есть все еще некоторые потенциальные трудности при обработке случаев, когда блок спецификации совместно используется несколькими классами (.foo, .bar, .baz { ... }
), которые могут или не могут быть распределены по нескольким строкам, или если несколько атрибутов определены в одной строке, но разобраться с ними следует довольно легко из того, что я уже изложил. В зависимости от ваших входных данных вам также может потребоваться включить базовый механизм состояний, чтобы отслеживать, в комментариях вы или нет.
[1], т.е., хотя у вас могут быть семантически вложенные классы, такие как .foo
и .foo .bar
, они должны быть указаны в файле CSS как
.foo {
...
}
.foo .bar {
...
}
и не может быть
.foo {
...
.bar {
...
}
}