Pola ekspresi reguler untuk karakter Pilcrow (¶) atau Partial Differential (∂)

Aug 19 2020

Saya perlu mencari / mengganti atau mengubah pilcrow / karakter diferensial parsial dalam string karena saat ini ditampilkan sebagai .

Apa yang saya pikir akan berhasil tetapi tidak:

const value = 'Javascript Regex pattern for Pilcrow (¶) or Partial Differential (∂) character';
const matches = value.match(/\u2029/gmi);
console.log(matches);

Tapi kembali kosong.

Sejujurnya, saya bahkan tidak yakin bagaimana mencapai apa yang harus saya lakukan.

Jawaban

5 ÁlvaroGonzález Aug 19 2020 at 21:16

Poin kode Unicode yang benar adalah U + 00B6 dan U + 2202 , bukan U + 2029 . Anda juga ingin menggunakan rentang karakter [] dalam ekspresi Anda:

const value = 'Javascript Regex pattern for Pilcrow (¶) or Partial Differential (∂) character';
const matches = value.match(/[\u00B6\u2202]/gmi);
console.log(matches);

Tentu saja, Anda tidak benar-benar membutuhkan \ u pelarian sejak awal:

const value = 'Javascript Regex pattern for Pilcrow (¶) or Partial Differential (∂) character';
const matches = value.match(/[¶∂]/gmi);
console.log(matches);

Last but not least, Anda berkata:

mereka saat ini ditampilkan sebagai .

Jika itu masalahnya, kemungkinan besar itu tidak dikodekan dengan benar untuk memulai. Dengan kata lain, Anda tidak akan menemukan atau karena mereka tidak ada. Saya sarankan Anda membahas ini dulu.

3 KunalMukherjee Aug 19 2020 at 20:34

Gunakan String.prototype.codePointAtuntuk mengekstrak titik kode UTF-16 unicode dan mengubahnya menjadi urutan digit hex.

const toUnicodeCodePointHex = (str) => {
    const codePoint = str.codePointAt(0).toString(16);
    return '\\u' + '0000'.substring(0, 4 - codePoint.length) + codePoint;
};

const value = 'Javascript Regex pattern for Pilcrow (¶) or Partial Differential (∂) character';

const re = new RegExp(['¶', '∂'].map((item) => toUnicodeCodePointHex(item)).join('|'), 'ig');

const matches = value.match(re);
console.log(matches);

Lihat ini sangat bagus articleoleh Mathias Bynens.

1 JordanStubblefield Aug 19 2020 at 20:55

Anda dapat menemukannya dengan nilai hex atau oktal:

const matches = value.match(/\u00B6|\u2202/g);

Regex untuk masing-masing:

Pilcrow: \u00B6atau \xB6atau\266

Diferensial Parsial: \u2202