Теперь, когда у Javascript есть взгляд назад (по состоянию на ES2018 ), в более новых средах вы можете полностью избегать групп в подобных ситуациях. Скорее, посмотрите за тем, что предшествует группе, которую вы захватывали, и посмотрите вперед, и замените просто !NEW_ID!
:
const str = 'name="some_text_0_some_text"';
console.log(
str.replace(/(?<=name="\w+)\d+(?=\w+")/, '!NEW_ID!')
);
При использовании этого метода полное совпадение - это только та часть, которую необходимо заменить.
(?<=name="\w+)
- Lookbehind for name"
, за которым следуют символы слова (к счастью, lookavhinds не обязательно должны иметь фиксированную ширину в Javascript!)
\d+
- Соответствие одной или нескольким цифрам - единственная часть шаблона, которая не находится в поиске, единственная часть строки, которая будет в полученном совпадении
(?=\w+")
- Смотрим вперед для символов слова, за которыми следует "
`
Имейте в виду, что взгляд сзади довольно новый. Он работает в современных версиях V8 (включая Chrome, Opera и Node), но не в большинстве других сред , по крайней мере, пока. Таким образом, хотя вы можете надежно использовать lookbehind в Node и в своем собственном браузере (если он работает в современной версии V8), он еще недостаточно поддерживается случайными клиентами (как на общедоступном веб-сайте).