Есть несколько проблем с этим регулярным выражением, худшая из которых заключается в том, что вы, кажется, смешиваете группы захвата и захвата. Как намекнул Майк Самуэль, третья группа захвата - это (\s*?)
в самом конце (которая, как и та, что в начале, не имела никакой полезной цели). Попробуйте это регулярное выражение:
/<span\b[^>]*\bclass=\s*(['"]?)forbes_entity\1[^>]*>[\s\S]*?<\/span>/ig
Здесь есть только одна группа захвата; он фиксирует одинарную кавычку, двойную кавычку или ничего. После имени класса \1
снова совпадает с тем же. (Я изменил имя класса, чтобы оно соответствовало образцу текста в вашей скрипке .)
Оказалось, что мне не нужны никакие другие группы, но если бы они мне были нужны, я бы использовал группы без захвата ((?:...)
), чтобы было легче отслеживать номера групп захвата. Я также использовал [\s\S]
вместо .
, чтобы соответствовать содержимому диапазона, если он содержит какие-либо новые строки.