Там нет ничего плохого с заменой значение '$1<b>$2</b>$3'
.Я бы просто изменил ваше регулярное выражение на следующее:
el = '<div style="color:red">123</div>';
el.replace(/(<div[^>]*>)(\d+)(<\/div>)/g, '$1<b>$2</b>$3');
Изменение соответствия первого первого div сохраняет полное соответствие тегам div, но гарантирует, что оно соответствует минимально возможному перед закрытием >
первый тег div, а не максимально возможный.
С вашим регулярным выражением вы не получите то, что хотели с этой строкой ввода:
el = '<div style="color:red">123</div><div style="color:red">456</div>';
Проблема с использованием чего-то вроде:
el.replace(/\d+/, '<b>$&</b>')
- это то, что не работает должным образом с такими вещами:
el = '<div style="margin-left: 10px">123</div>'
, потому что он собирает числа внутри тега div.