Регулярное выражение для получения имени класса - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь написать некоторое регулярное выражение, чтобы получить классы только в теге HTML.

Например,

<h1 class="big blue" id="testing"> some text </h1>

Я хочу, чтобы регулярное выражение возвращало большой синий цвет. Я пытался сделать это, но он также включает в себя идентификатор:

Регулярное выражение: <(.+)?class=\s*"(.+)?"> Пример тестирования: <h1 class="big blue" id="testing"> some text </h1>

https://regex101.com/r/0weyDs/2

1 Ответ

1 голос
/ 12 января 2020

(я использую JavaScript для этого)

Если вы уверены, что в имени класса class="abc xyz" нет ", тогда вы можете использовать

/<(.+?)class=\s*"([^"]*?)"/g

Пример:

([...'<h1 class="big blue" id="testing"> some text </h1><div id="foo" class="blue danube page-title"> some text </div><span class=""></span>'
  .matchAll(/<(.+?)class=\s*"([^"]*?)"/g)].map(arr => arr[2]))

даст

["big blue", "blue danube page-title", ""]

Одна ошибка, связанная с не жадностью: это .+?, а если у вас (.+)?, это означает совпадение в максимально возможной степени и затем «необязательный».

Другая проблема заключается в том, что вы, вероятно, захотите сопоставить class="" как "", поэтому это будет [^"]*, а не [^"]+

Одна проблема с вашим регулярным выражением orignail является то, что вы соответствуете окончанию >, поэтому оно должно совпадать до конца, даже если вы говорите не жадный. Вы можете увидеть https://regex101.com/r/0weyDs/3 для

<(.+?)class=\s*"(.+?)"

или https://regex101.com/r/0weyDs/4 для первого регулярного выражения в ответе.

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