Respuesta técnica directa
Las clases de caracteres regex estándar (\w, \d, [a-z]) solo coinciden con caracteres ASCII y fallan con el texto internacional. Los motores regex modernos admiten el modo Unicode (el flag /u o /v en ECMAScript) y los escapes de propiedades Unicode (\p{...}) para coincidir con caracteres según sus propiedades oficiales de Unicode.
Escapes de propiedades Unicode esenciales
Los escapes de propiedades Unicode más comúnmente requeridos, con soporte en los motores modernos.
\p{L} or \p{Letter}
Coincidencias: Cualquier letra en cualquier idioma (latín, griego, cirílico, árabe, hebreo, CJK, etc.)
Ejemplo: a, é, Ω, Ж, ش, א, 漢
\p{N} or \p{Number}
Coincidencias: Cualquier carácter numérico o dígito (incluidos los números romanos, subíndices y superíndices)
Ejemplo: 5, ², Ⅳ, ٥
\p{P} or \p{Punctuation}
Coincidencias: Cualquier carácter de puntuación
Ejemplo: !, ?, —, «, », ¿
\p{Z} or \p{Separator}
Coincidencias: Cualquier espacio en blanco o separador invisible
Ejemplo: Espacio, espacio de no separación, espacio de un em
\p{Extended_Pictographic}
Coincidencias: Todos los emojis y símbolos pictográficos
Ejemplo: 😀, 🔥, 🚀, 🎉
\p{Script=Greek}
Coincidencias: Caracteres específicos de la escritura griega
Ejemplo: α, β, γ, Δ
Coincidencia de letras internacionales y emojis con escapes de propiedades Unicode
// 1. Traditional \w fails on accented letters and non-Latin alphabets
const asciiRegex = /^\w+$/;
console.log(asciiRegex.test('José')); // false!
console.log(asciiRegex.test('Müller')); // false!
// 2. Unicode property escape \p{L} matches any letter in Unicode
const unicodeNameRegex = /^[\p{L}]+$/u;
console.log(unicodeNameRegex.test('José')); // true!
console.log(unicodeNameRegex.test('Müller')); // true!
console.log(unicodeNameRegex.test('Владимир')); // true (Cyrillic)!
console.log(unicodeNameRegex.test('田中')); // true (Kanji)!
// 3. Matching Emojis with \p{Extended_Pictographic}
const emojiRegex = /\p{Extended_Pictographic}/u;
console.log(emojiRegex.test('Hello 🔥!')); // true!
false
false
true
true
true
true
true
Errores comunes frente a patrones de producción
Aprenda qué patrones fallan en producción y cuáles son las alternativas modernas conformes con los estándares.
Coincidir con emojis de forma segura
Validación de chats, saneamiento de entradas, filtros de reacciones.const badEmojiRegex = /[\u1F600-\u1F64F]/; // Matches only one block!
const goodEmojiRegex = /\p{Extended_Pictographic}/u;
goodEmojiRegex.test('🔥'); // true
goodEmojiRegex.test('🍣'); // true
Matriz de casos límite e invariantes
Una matriz de pruebas diversa entre caracteres que compara el comportamiento de los caracteres en ASCII, marcas combinantes, emojis, banderas y fragmentos sustitutos.
| Caso de prueba | Glifo de entrada | Unidades de código | Puntos de código | Grafemas | Categoría | Explicación técnica |
|---|---|---|---|---|---|---|
| Nombre con acentos | Renée |
—
|
—
|
—
|
Standard | Tanto las letras base como las letras acentuadas coinciden con \p{L}. |
| Texto cirílico | Привет |
—
|
—
|
—
|
Standard | Las letras cirílicas coinciden con \p{L} en modo Unicode. |
| Ideogramas CJK | 東京 |
—
|
—
|
—
|
Standard | Coincide explícitamente con caracteres Kanji/Han. |
Procedencia de estándares y fuentes
Todos los invariantes técnicos, las API y los comportamientos de esta guía se verifican contra las especificaciones primarias oficiales.
Unicode Technical Standard #18: Unicode Regular Expressions
Cláusula: §1.2 Properties
ECMAScript 2024 Language Specification
Cláusula: §22.2 RegExp (Regular Expression) Objects