Modello Regex per carattere Pilcrow (¶) o differenziale parziale (∂)

Aug 19 2020

Devo trovare trovare / sostituire o convertire i caratteri pilcrow / differenziali parziali in una stringa come attualmente mostrano come .

Quello che pensavo avrebbe funzionato ma non funziona:

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

Ma ritorna vuoto.

Ad essere onesti, non sono nemmeno sicuro di come ottenere ciò che devo fare.

Risposte

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

I punti di codice Unicode corretti sono U + 00B6 e U + 2202 , non U + 2029 . Dovrai anche utilizzare un intervallo di caratteri [] nella tua espressione:

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

Ovviamente, non hai davvero bisogno di \ u escape in primo luogo:

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

Ultimo ma non meno importante, dici:

attualmente vengono visualizzati come .

In tal caso, è molto probabile che non sia codificato correttamente per cominciare. In altre parole, non troverai o perché non ci sono. Ti suggerisco di affrontare prima questo.

3 KunalMukherjee Aug 19 2020 at 20:34

Utilizzare String.prototype.codePointAtper estrarre il punto di codice Unicode UTF-16 e convertirlo in una sequenza di cifre esadecimali.

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

Vedi questo molto carino articledi Mathias Bynens.

1 JordanStubblefield Aug 19 2020 at 20:55

Puoi trovarli per valore esadecimale o ottale:

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

Regex per ciascuno:

Pilcrow: \u00B6o \xB6o\266

Differenziale parziale: \u2202