W3docs

Comprendere Unicode in JavaScript: flag e classi

Impara il flag regex "u" di JavaScript per gestire correttamente i code point e le coppie surrogate, più gli escape di proprietà Unicode \p{...} e \P{...}.

Introduzione a Unicode

JavaScript supporta Unicode, uno standard di codifica dei caratteri che consente la rappresentazione di testo proveniente da più lingue e sistemi di scrittura. Unicode è essenziale per sviluppare applicazioni internazionalizzate e gestire efficacemente dati di testo diversificati. In questo capitolo esploreremo i flag e le classi Unicode in JavaScript, esaminandone l'utilizzo e fornendo esempi pratici per migliorare la comprensione.

Il flag Unicode u

Il flag u abilita la corrispondenza Unicode completa nelle espressioni regolari. Per impostazione predefinita, una regex tratta una string come una sequenza di unità di codice UTF-16. I caratteri al di fuori del Piano Multilingue Base (BMP) — emoji, molti simboli matematici e script più rari — vengono memorizzati come coppia surrogata: due unità di codice che insieme codificano un singolo code point. Senza il flag u, il motore regex vede queste due metà separatamente, il che compromette ., gli intervalli di caratteri e i quantificatori per tali caratteri.

Con il flag u impostato, il motore lavora in termini di code point anziché di unità di codice, quindi un singolo carattere astrale conta come un unico carattere.

Coppie surrogate e perché il flag è importante

. corrisponde a un singolo carattere. Senza u, corrisponde solo a una unità di codice, quindi non può abbinare da solo un intero carattere astrale.

javascript— editable

😀 è la coppia surrogata per 😀. String#length riporta 2 perché conta le unità di codice, mentre espandendo la string in un array (che itera per code point) si ottiene 1. Senza u, /^.$/ fallisce perché . corrisponde solo a una delle due metà; con u corrisponde all'intero carattere.

Utilizzo del flag u

javascript— editable

Qui 👍 è l'emoji del pollice su. Senza il flag u, la regex a.b non può corrispondere perché . consuma solo metà della coppia surrogata. Con il flag u, . consuma l'intero code point, quindi il pattern trova una corrispondenza.

Contare i caratteri correttamente

Una regex con il flag u e il flag g permette di iterare sui caratteri reali, inclusi quelli astrali.

javascript— editable

Combinare il flag u con altri flag

Il flag u si combina con gli altri flag. Questo esempio aggiunge globale (g) e insensibile alle maiuscole (i).

javascript— editable

Questo esempio illustra come combinare il flag u con i flag globale (g) e insensibile alle maiuscole (i). La regex corrisponde correttamente ad A👍b, dimostrando come il flag u possa essere usato con altri flag per una corrispondenza più flessibile.

Escape di proprietà Unicode: \p{...} e \P{...}

Gli escape di proprietà Unicode forniscono un modo per abbinare i caratteri in base alle loro proprietà Unicode. Questa funzionalità, introdotta in ECMAScript 2018, semplifica il lavoro con tipi specifici di caratteri.

Sintassi degli escape di proprietà Unicode

  • \p{Property=Value}: Corrisponde ai caratteri con la proprietà specificata.
  • \P{Property=Value}: Corrisponde ai caratteri privi della proprietà specificata.

Proprietà Unicode comuni

Per le categorie generali a singola lettera, puoi scrivere direttamente il nome della proprietà: \p{L} è l'abbreviazione di \p{General_Category=Letter}.

  1. Categoria generale: Corrisponde ai caratteri in base alla loro categoria generale.
    • \p{L} (Lettera): Corrisponde a qualsiasi lettera, in qualsiasi script.
    • \p{N} (Numero): Corrisponde a qualsiasi carattere numerico.
    • \p{P} (Punteggiatura): Corrisponde alla punteggiatura.
    • \p{Lu} / \p{Ll}: Lettere maiuscole / minuscole.
  2. Script: Corrisponde ai caratteri appartenenti a un sistema di scrittura.
    • \p{Script=Greek} (o \p{sc=Greek}): Caratteri greci.
    • \p{Script=Han}: Caratteri Han (cinese, giapponese, coreano).
    • \p{Script=Cyrillic}: Caratteri cirillici.
  3. Proprietà binarie: Corrispondono ai caratteri che hanno una determinata caratteristica.
    • \p{Emoji}, \p{Emoji_Presentation}: Caratteri emoji.
    • \p{White_Space}: Spazi bianchi.

La forma con lettera maiuscola \P{...} è la negazione — corrisponde a ogni carattere che non ha la proprietà. Per una trattazione più approfondita della forma con parentesi quadre [...], consulta le classi di caratteri.

Esempi di escape di proprietà Unicode

javascript— editable

Qui, \p{L} corrisponde a qualsiasi lettera. La regex \p{L}+ trova tutte le sequenze di lettere nella string 'Hello123', restituendo ["Hello"].

javascript— editable

In questo esempio, \p{N} corrisponde a qualsiasi numero. La regex \p{N}+ estrae tutte le sequenze numeriche dalla string 'Hello123', ottenendo ["123"].

javascript— editable

\P{L} è l'inverso di \p{L}, quindi \P{L}+ cattura le sequenze che non contengono lettere — in questo caso "123!".

javascript— editable

Questo esempio usa \p{Script=Greek} per abbinare caratteri greci. La regex corrisponde con successo alla string greca 'αβγδε'.

Abbinare le emoji

Poiché \p{...} richiede u, gestisce correttamente anche le emoji astrali — ogni emoji viene trattata come un singolo carattere.

javascript— editable
Attenzione

L'uso degli escape di proprietà Unicode può influire sulle prestazioni, specialmente con grandi quantità di testo. Ottimizza le tue espressioni regolari e verifica le loro prestazioni nel tuo caso d'uso specifico.

Applicazioni pratiche

Validazione dell'input utente

Gli escape di proprietà Unicode possono validare l'input dell'utente in modo più preciso, garantendo che vengano accettati solo i caratteri consentiti.

javascript— editable

Questa regex garantisce che un nome utente valido inizi con almeno due lettere, seguite da qualsiasi combinazione di lettere e numeri. 'User123' supera la validazione, mentre '123User' no.

Estrazione di caratteri specifici

Puoi estrarre tipi specifici di caratteri da una string usando gli escape di proprietà Unicode.

javascript— editable

In questo esempio, \p{L}+ corrisponde a tutte le sequenze di lettere nella string 'Hello, κόσμε!', restituendo ["Hello", "κόσμε"].

Informazione

Usa sempre il flag u con gli escape di proprietà Unicode

Quando utilizzi gli escape di proprietà Unicode, abilita sempre il flag u per garantire una corrispondenza corretta. Senza questo flag, gli escape di proprietà genereranno un SyntaxError.

javascript— editable

Conclusione

Comprendere e utilizzare Unicode in JavaScript è fondamentale per sviluppare applicazioni robuste e internazionalizzate. Sfruttando il flag u e gli escape di proprietà Unicode, puoi gestire dati di testo diversificati in modo più efficace e ottenere una corrispondenza precisa dei caratteri. Integra queste tecniche nei tuoi progetti per migliorarne la funzionalità e garantire che soddisfino gli standard globali.

Esercitazione

Pratica
Cosa modifica il flag 'u' nelle espressioni regolari JavaScript?
Cosa modifica il flag 'u' nelle espressioni regolari JavaScript?
Was this page helpful?