(я использую 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 для первого регулярного выражения в ответе.