Substitua um caractere de uma string
Eu tenho um string que se parece com isso: [TITLE|prefix=a].
A partir dessa string, o texto |prefix=aé dinâmico. Portanto, pode ser qualquer coisa ou vazio. Eu gostaria de substituir (nesse caso) [TITLE|prefix=a]por [TITLE|prefix=a|suffix=z].
Portanto, a ideia é substituir ]de uma string que começa com [TITLE with |suffix=z].
Por exemplo, se a string for [TITLE|prefix=a], deve ser substituída por [TITLE|prefix=a|suffix=z]. Se for [TITLE], deve ser substituído por [TITLE|suffix=z]e assim por diante.
Como posso fazer isso com RegEx?
Eu tentei dessa forma, mas deu um erro:
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur]';
const x = 'TITLE';
const regex = new RegExp(`([${x})*]`, 'gi'); str = str.replace(regex, "$1|suffix=z]");
console.log(str);
Eu também tentei escapar dos personagens [e] com, new RegExp(`(\[${x})*\]`, 'gi');mas isso não ajudou.
Respostas
Você precisa se lembrar de usar \\uma literal de string regular para definir uma única barra invertida literal.
Então, você precisa de um padrão como
/(\[TITLE(?:\|[^\][]*)?)]/gi
Veja a demonstração do regex . Detalhes:
(\[TITLE\|[^\][]*)- Capturando grupo 1:\[TITLE-[TITLEtexto(?:\|[^\][]*)?- uma ocorrência opcional de um|caractere seguido por 0 ou mais caracteres diferentes de]e[
]- um]char.
Dentro de seu código JavaScript, use o seguinte para definir o padrão dinâmico:
const regex = new RegExp(`(\\[${x}\\|[^\\][]*)]`, 'gi');
Veja a demonstração JS:
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur] [TITLE]';
const x = 'TITLE';
const regex = new RegExp(`(\\[${x}(?:\\|[^\\][]*)?)]`, 'gi');
str = str.replace(regex, "$1|suffix=z]");
console.log(str);
// => Lorem ipsum [TITLE|prefix=a|suffix=z] dolor [sit] amet [consectetur]
Acho que a solução para o seu problema seria semelhante a esta:
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur]';
str = str.replace(/(\[[^\|\]]+)(\|[^\]]*)?\]/g, "$1$2|suffix=z]");
console.log(str);