Modèle Regex pour le caractère Pilcrow (¶) ou Partial Differential (∂)

Aug 19 2020

J'ai besoin de trouver / remplacer ou convertir les caractères différentiels pilcrow / partiels dans une chaîne comme ils apparaissent actuellement comme .

Ce que je pensais fonctionnerait mais ne fonctionne pas:

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

Mais retourne vide.

Pour être honnête, je ne sais même pas comment réaliser ce que je dois faire.

Réponses

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

Les points de code Unicode corrects sont U + 00B6 et U + 2202 , et non U + 2029 . Vous souhaiterez également utiliser une plage de caractères [] dans votre expression:

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

Bien sûr, vous n’avez pas vraiment besoin d’échappées \ u en premier lieu:

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

Dernier point mais non le moindre, vous dites:

ils s'affichent actuellement comme .

Si tel est le cas, il est très probable qu'il ne soit pas correctement encodé pour commencer. En d'autres termes, vous ne trouverez pas ou parce qu'ils ne sont pas là. Je vous suggère d'aborder cette question.

3 KunalMukherjee Aug 19 2020 at 20:34

Utilisez String.prototype.codePointAtpour extraire le point de code Unicode UTF-16 et le convertir en séquence de chiffres hexadécimaux.

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

Voir ce très joli articlepar Mathias Bynens.

1 JordanStubblefield Aug 19 2020 at 20:55

Vous pouvez les trouver par valeur hexadécimale ou octale:

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

Regex pour chacun:

Pilcrow: \u00B6ou \xB6ou\266

Différentiel partiel: \u2202