Patrón de expresiones regulares para el carácter Pilcrow (¶) o diferencial parcial (∂)

Aug 19 2020

Necesito encontrar buscar / reemplazar o convertir pilcrow / caracteres diferenciales parciales en una cadena como se muestran actualmente como .

Lo que pensé que funcionaría pero no lo hace:

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

Pero vuelve vacío.

Para ser honesto, ni siquiera estoy seguro de cómo lograr lo que necesito hacer.

Respuestas

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

Los puntos de código Unicode correctos son U + 00B6 y U + 2202 , no U + 2029 . También querrá usar un rango de caracteres [] en su expresión:

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

Por supuesto, realmente no necesitas \ u escapes en primer lugar:

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

Por último, pero no menos importante, dices:

actualmente se muestran como .

Si ese es el caso, es muy probable que no esté codificado correctamente para empezar. En otras palabras, no encontrarás o porque no están. Le sugiero que aborde esto primero.

3 KunalMukherjee Aug 19 2020 at 20:34

Úselo String.prototype.codePointAtpara extraer el punto de código Unicode UTF-16 y convertirlo en una secuencia de dígitos hexadecimales.

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

Mira esto muy bonito articlede Mathias Bynens.

1 JordanStubblefield Aug 19 2020 at 20:55

Puede encontrarlos por valor hexadecimal u octal:

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

Regex para cada uno:

Pilcrow: \u00B6o \xB6o\266

Diferencial parcial: \u2202