как найти именованные цвета, кроме "прозрачного", используя регулярные выражения - PullRequest
0 голосов
/ 31 августа 2018

Я хочу найти

  1. все цвета фона с именами ("красный", "синий" и т. Д.),
  2. кроме "none" и "transarents".
  3. И это не должно быть закомментировано "//".

К сожалению, с этим regEx я все еще нахожу " прозрачный ":

(^\s*background:\s*)[a-z]{3,10};

Пример исходного кода:

background: #fff; // should not be found
background: transparents; // should not be found, but is found
// background: blue; // should not be found
background: blue; // should be found

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

В больших CSS ^ якорь не будет работать. Попробуйте (*SKIP)(*FAIL) в PCRE:

//\N*(*SKIP)(*F)|background:\s*(?!transparent|none)\w+

Это касается и комментариев. Ваше текущее регулярное выражение не исключает ничего. Он должен извлечь выгоду из негативного взгляда, так как PCRE поддерживает подобные конструкции.

Смотрите демо здесь

0 голосов
/ 31 августа 2018

Вы можете использовать положительное значение lookahead с чередованием , а вместо {3,10} вы можете использовать + для соответствия одному или нескольким символам.

(^\s*background:\s*)(?!\b(?:none|transparent)\b)[a-z]+;

Вы можете также опустить круглые скобки вокруг (^\s*background:\s*), если вы больше не ссылаетесь на эту группу.

0 голосов
/ 31 августа 2018

Используйте негативный взгляд вперед:

^\s*background:\s*(?!transparents|none)[a-z]{3,};

Я изменил соответствие, чтобы не ограничивать длину, так как transparents в любом случае не соответствовал бы, как 12 символов (не 10, как указано в вашем регулярном выражении).

Я также убрал лишние скобки.

...