Flag m di JavaScript Regex (Multiline)
Il flag m nelle espressioni regolari JavaScript permette agli ancoraggi ^ e $ di corrispondere all'inizio e alla fine di ogni riga in una stringa multiriga.
Introduzione alla modalità multiriga
Il flag m in JavaScript nelle espressioni regolari consente agli ancoraggi ^ e $ di corrispondere all'inizio e alla fine di ogni riga in una stringa multiriga, anziché solo all'inizio e alla fine dell'intera stringa. Questo è particolarmente utile quando si lavora con testo su più righe e si ha bisogno di eseguire corrispondenze di pattern riga per riga.
Questa pagina illustra cosa cambia il flag m, come si differenzia dal comportamento predefinito degli ancoraggi, come si combina con i flag g e i, e i pattern pratici per l'analisi di testo orientato alle righe, come i log.
Comportamento predefinito vs. modalità multiriga
Per impostazione predefinita (senza m), ^ corrisponde solo all'inizio dell'intera stringa e $ solo alla fine. Un'interruzione di riga (\n) all'interno della stringa è semplicemente un carattere ordinario — non crea nuove posizioni di ancoraggio.
Con il flag m, ^ corrisponde anche alla posizione immediatamente dopo ogni \n, e $ corrisponde anche alla posizione immediatamente prima di ogni \n (oltre all'inizio/fine effettivi della stringa). La corrispondenza non include mai il carattere di nuova riga — gli ancoraggi sono posizioni a larghezza zero.
Senza m, solo l'abc all'inizio della stringa è ancorato da ^. Aggiungendo m, ^ può corrispondere anche dopo l'interruzione di riga, trovando entrambe le righe abc. (Il flag g è quello che raccoglie tutte le corrispondenze invece di fermarsi alla prima.)
Il flag m: abilitare la modalità multiriga
Quando si usa il flag m, gli ancoraggi ^ e $ corrispondono alle posizioni prima e dopo le interruzioni di riga all'interno della stringa.
Utilizzo del flag m
In questo esempio, la regex ^abc corrisponde all'inizio di ogni riga che inizia con "abc" grazie al flag m. Il flag g assicura che vengano trovate tutte le occorrenze. Senza il flag m, corrisponderebbe solo ad "abc" all'inizio della stringa.
Esempio: Corrispondenza su più righe
Qui, la regex ^start corrisponde all'inizio delle righe che cominciano con "start" grazie alla combinazione dei flag m e g.
Applicazioni pratiche
Corrispondenza di righe in testo multiriga
Il flag m è particolarmente utile per trovare pattern specifici all'inizio o alla fine di ogni riga in una stringa multiriga.
Questo esempio mostra come ^hello con il flag m trovi "hello" all'inizio di ogni riga.
Corrispondenza della fine delle righe in testo multiriga
Allo stesso modo, puoi usare il flag m per trovare pattern alla fine di ogni riga.
Qui, world$ con il flag m trova "world" alla fine di ogni riga.
Esempio: Estrazione di righe specifiche
Questo esempio mostra come estrarre tutte le righe che iniziano con "Error:" da un file di log usando il flag m.
Combinazione di flag
Puoi combinare il flag m con altri flag per potenziare le tue espressioni regolari. Ad esempio, combinare il flag m con il flag i (case-insensitive) consente di eseguire corrispondenze multiriga senza distinzione tra maiuscole e minuscole.
Esempio: Corrispondenza multiriga senza distinzione tra maiuscole e minuscole
In questo esempio, la regex trova le righe contenenti "hello" indipendentemente dalla maiuscola o minuscola, grazie alla combinazione dei flag m e i.
- Il pattern regex
^.*hello.*$corrisponde a qualsiasi riga che contenga "hello" indipendentemente dalla maiuscola o minuscola. - Il flag
massicura che ogni riga nella stringa multiriga venga trattata individualmente. Hello world,hello worldeHELLO WORLDcorrispondono tutti al pattern perché contengono "hello" (senza distinzione tra maiuscole e minuscole) da qualche parte nella riga.
Usa il flag m nelle regex JavaScript per applicare gli ancoraggi ^ e $ a ogni riga in una stringa multiriga, migliorando la capacità di validare e manipolare contenuti riga per riga.
Usare il flag m per la validazione riga per riga
Il flag m è ideale per gli scenari in cui è necessario validare o manipolare ogni riga individualmente all'interno di una stringa multiriga.
Esempio: Validazione di un numero di telefono statunitense
Questa regex verifica che il numero di telefono sia nel formato (123) 456-7890. Usa ^ per indicare l'inizio e $ per indicare la fine, assicurando che l'intera riga corrisponda al pattern specificato.
Pertanto, sia "(123) 456-7890" che "(234) 567-8901" corrispondono al pattern regex perché seguono il formato (xxx) xxx-xxxx, che la regex è progettata per riconoscere.
Errori comuni
minfluisce solo su^e$, non su.— Il punto continua a non corrispondere a una nuova riga. Se hai bisogno che.attraversi le interruzioni di riga, usa il flag separatos(dotAll). Il flagmcambia dove le righe iniziano e finiscono; il flagscambia ciò che.corrisponde.mnon equivale alla corrispondenza di parole intere. Per trovare corrispondenze ai bordi di una parola anziché di una riga, usa il\bconfine di parola invece di^/$.- Senza
g,match()restituisce solo il primo risultato. Il flagmabilita posizioni di ancoraggio aggiuntive, ma hai ancora bisogno digper raccogliere ogni riga. Combinali comegm.
Conclusione
Il flag m nelle espressioni regolari JavaScript estende la funzionalità degli ancoraggi ^ e $ per corrispondere all'inizio e alla fine di ogni riga in una stringa multiriga. Questa capacità è preziosa per elaborare dati di testo su più righe, consentendo corrispondenze e validazioni precise riga per riga.