Ganti karakter string

Sep 11 2020

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

3 WiktorStribiżew Sep 11 2020 at 13:12

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]

nemoinho Sep 11 2020 at 13:16

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);