Agora que o Javascript olhou para trás (a partir do ES2018 ), em ambientes mais novos, é possível evitar grupos inteiramente em situações como estas. Em vez disso, preste atenção no que vem antes do grupo que você estava capturando, e procure logo depois, e substitua por apenas !NEW_ID!
:
const str = 'name="some_text_0_some_text"';
console.log(
str.replace(/(?<=name="\w+)\d+(?=\w+")/, '!NEW_ID!')
);
Com esse método, a correspondência completa é apenas a parte que precisa ser substituída.
(?<=name="\w+)
- Lookbehind name"
, seguido por caracteres de palavra (felizmente, lookbehinds não precisa ter largura fixa em Javascript!)
\d+
- Corresponde a um ou mais dígitos - a única parte do padrão que não está em uma visão geral, a única parte da sequência que estará na correspondência resultante
(?=\w+")
- Procure por caracteres de palavras seguidos por "
`
Lembre-se de que olhar para trás é muito novo. Ele funciona nas versões modernas do V8 (incluindo Chrome, Opera e Node), mas não na maioria dos outros ambientes , pelo menos ainda não. Portanto, embora você possa usar o lookbehind de forma confiável no Node e em seu próprio navegador (se ele for executado em uma versão moderna do V8), ele ainda não é suficientemente suportado por clientes aleatórios (como em um site público).