Regex для поиска класса CSS в разметке HTML - PullRequest
0 голосов
/ 27 марта 2019

Я ищу регулярное выражение, чтобы найти все экземпляры имени класса CSS в разметке HTML.Пока у меня есть это, предполагая, row является именем класса, который я ищу:

class=\"[a-zA-Z0-9\-_\s]*row[a-zA-Z0-9\-_\s]*\"

Это правильно соответствует всем следующим:

class="foo_bar bar row test"
class="row"
class="hello foo bar  row"
class=" foo bar  row test "

И правильно нене соответствует этому:

class="hello"  row

К сожалению, оно некорректно соответствует этим (ложным срабатываниям):

class="narrow"
class="rowdy"

Какой регулярный оператор найдет определенное имя класса CSS в HTML?

Обновление Есть много комментариев о том, как мне не следует анализировать DOM с помощью регулярных выражений.Мой вариант использования - сделать «найти все» в большом проекте с тысячами HTML-файлов, чтобы найти, где используются конкретные классы CSS.Я не работаю внутри браузера или не имею доступа к DOM.

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Необходимо сделать границы, но \b недостаточно, поскольку оно соответствует положению между - и r в a-row, которое ожидается, но не предназначено.Чтобы определить эту границу, чтобы разрешить только пробелы или позицию сразу после или до " атрибута класса, вам нужно написать шаблон с двумя ветвями:

class="(?:row|[^"]* row)(?![^" ])[^"]*"

Выше можно сократить до (ноне является предпочтительным):

class="(?:[^"]* )?row(?![^" ])[^"]*"

Короче, но то же самое, что и длиннее (по производительности):

class="(?:[^"]* )??row(?: [^"]*)?"

Распределение регулярных выражений:

  • class=" Матч class=" буквально
  • (?: Начало группы без захвата
    • row Матч row
    • | Или
    • [^"]* row Совпадение row с предшествующим пробелом
  • ) Конец группы захвата
  • (?![^" ]) Следующий непосредственный символ должен быть пробелом или "
  • [^"]*" Совпадение до и включительно "

Смотрите живую демонстрацию здесь

1 голос
/ 27 марта 2019

Попробуйте следующее регулярное выражение

* ** 1003 тысяча два * (класс \ s = \ S??) \ "([\ Д \ ш \ s -] ) (\ брови \ б) ([\ д \ ш \ с] ) \ "

Проверено все упомянутые вами случаи

https://regex101.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...