Регулярный поиск заменить CSS - PullRequest
0 голосов
/ 06 июня 2018

Я использую NotepadQQ (вариант Notepadd ++ для Linux) и у меня есть файл CSS длиной более 5500 строк.Мои знания о регулярных выражениях ограничены самыми основами.

Мне нужно найти и удалить все, что не содержит определенных шестнадцатеричных цветовых кодов.

Пример CSS выглядит следующим образом:

section[id*='rss-'] ul>li .rssSummary {
color:#353535;
padding-left:10px
}

.follow_me .side_body ul li a.sm {
-webkit-transition:background,.5s,ease;
-moz-transition:background,.5s,ease;
transition:background,.5s,ease;
border-radius:50%;
border:3px solid #363b37;
display:block;
height:57px;
margin:0 10px 10px 0;
text-align:center;
width:57px
}

.follow_me .side_body ul li a.sm span {
color:#363b37;
display:block;
font-family:'squared-icomoon';
font-size:40px;
height:57px;
line-height:57px;
width:57px
}

.follow_me .side_body ul li a.fb:hover {
border-color:#4c698c !important;
background:#4c698c
}

.follow_me .side_body ul li a.twitter:hover {
border-color:#00aced !important;
background:#00aced
}

Но должно быть

.follow_me .side_body ul li a.sm {
border:3px solid #363b37;
}

.follow_me .side_body ul li a.sm span {
color:#363b37;
}

.follow_me .side_body ul li a.fb:hover {
border-color:#4c698c !important;
background:#4c698c
}

Если селектор содержит какие-либо строки свойств с определенными цветами (#363b37, #74a5bf, #6c9ab2, #6995ad, #6691a8 или #4c698c), селектор и эти свойства и значения должны остаться.

Если селектор не содержит ни одного из этих значений цвета, его следует полностью удалить.

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

Возможно ли это с помощью регулярных выражений при поиске и замене, и если да, то как?ТИА!

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вам нужно сосредоточиться на { и }.Как я понимаю, вам нужны группы строк этого шаблона selector(s){properties}.Регулярное выражение (.+)\{((.+):(.+))+\}.С помощью этого выражения вы получите массив (предположим, его имя g1) из строки соответствующих групп этого шаблона.Теперь во всех этих группах вы должны отфильтровать свойства, которые лежат в отдельных строках.Вы можете использовать два типа фильтров

  1. перевод строки (\ n)
  2. Точка с запятой (.)

Регулярное выражение ((.+):(.+)(\n|;))+ будетдать все свойства внутри селектора (или, другими словами, внутри фигурной скобки {все свойства}).Теперь о цветных узорах внутри объекта.Регулярное выражение (#{1}(.)+)* выдаст все значения цвета внутри свойства.Теперь проверьте, соответствует ли строка этого значения, которая выходит из свойства внутри селектора, какому-либо из значений вашего свойства (# 363b37, # 74a5bf, # 6c9ab2, # 6995ad, # 6691a8 или # 4c698c) и примите соответствующие меры, как указано в вашем вопросе.,Если сравнение строки значения цвета возвращает true для любого значения в вашем наборе, сохраните свойство.если внутри селектора вы получите свойство, которое соответствует любому из значений цвета, сохраните селектор.Отменить свойство, которое не соответствует всем значениям цвета, и селектор, у которого нет свойства.

0 голосов
/ 06 июня 2018

Если вы работаете в Linux, вы можете использовать следующее быстрое и грязное решение, используя команду awk для этой задачи:

awk '/{/{buffer=$0; inside=1;}{if(inside){if($0 ~ /#[abcdefABCDEF0-9]+/)buffer=buffer ORS $0}else print}/}/{inside=0;print buffer ORS "}";}' input.css 
section[id*='rss-'] ul>li .rssSummary {
color:#353535;
}

.follow_me .side_body ul li a.sm {
border:3px solid #363b37;
}

.follow_me .side_body ul li a.sm span {
color:#363b37;
}

.follow_me .side_body ul li a.fb:hover {
border-color:#4c698c !important;
background:#4c698c
}

.follow_me .side_body ul li a.twitter:hover {
border-color:#00aced !important;
background:#00aced
}

Пояснения:

  • /{/{buffer=$0; inside=1;} при достижении строки, содержащей {, сбросьте буфер и установите inside на 1.
  • {if(inside){if($0 ~ /#[abcdefABCDEF0-9]+/)buffer=buffer ORS $0}else print}, если внутри 1, то проверьте, содержит ли строка код цвета(hex рассматривается только в примере, но может быть адаптирован к RGB), если вы добавляете его в буфер, если мы не "inside", просто выведите строку.
  • /}/{inside=0;print buffer ORS "}";} когда мы достигаем закрывающей скобки, мы печатаем содержимое буфера
  • Затем вы можете перенаправить вывод в другой файл CSS.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...