Ganti karakter string
Aku punya string yang terlihat seperti ini: [TITLE|prefix=a].
Dari string itu, teksnya |prefix=adinamis. Jadi bisa jadi apa saja atau kosong. Saya ingin mengganti (dalam hal ini) [TITLE|prefix=a]dengan [TITLE|prefix=a|suffix=z].
Jadi idenya adalah mengganti ]dari string yang dimulai dengan [TITLE with |suffix=z].
Misalnya, jika stringnya [TITLE|prefix=a], itu harus diganti dengan [TITLE|prefix=a|suffix=z]. Kalau sudah [TITLE], harus diganti dengan [TITLE|suffix=z]dan sebagainya.
Bagaimana saya bisa melakukan ini dengan RegEx?
Saya telah mencobanya dengan cara ini tetapi memberikan kesalahan:
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);
Saya juga mencoba melarikan diri dari karakter [dan] dengan new RegExp(`(\[${x})*\]`, 'gi');tetapi itu tidak membantu.
Jawaban
Anda harus ingat untuk menggunakan \\dalam string literal biasa untuk mendefinisikan satu garis miring terbalik literal.
Kemudian, Anda membutuhkan pola seperti
/(\[TITLE(?:\|[^\][]*)?)]/gi
Lihat demo regex . Rincian:
(\[TITLE\|[^\][]*)- Penangkapan grup 1:\[TITLE-[TITLEteks(?:\|[^\][]*)?- kemunculan opsional dari|karakter yang diikuti dengan 0 atau lebih karakter selain]dan[
]-]arang.
Di dalam kode JavaScript Anda, gunakan yang berikut ini untuk menentukan pola dinamis:
const regex = new RegExp(`(\\[${x}\\|[^\\][]*)]`, 'gi');
Lihat demo 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]
Saya pikir solusi untuk masalah Anda akan terlihat seperti ini:
let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur]';
str = str.replace(/(\[[^\|\]]+)(\|[^\]]*)?\]/g, "$1$2|suffix=z]");
console.log(str);