Le espressioni regolari (abbreviate in regex) vengono utilizzate per operare su modelli trovati nelle stringhe. Possono trovare, sostituire o rimuovere alcune parti di stringhe a seconda di ciò che dici loro di fare. In Ruby, sono sempre contenuti all’interno di due barre in avanti.
Ad esempio, utilizzando il .metodo gsub per stringhe:
sentence = "This is a sample sentence."
sentence.gsub(/a/, "") #returns "This is smple sentence."
Il .il metodo gsub sta trovando tutte le a nella stringa e rimuovendole, perché la seconda metà dell’argomento è vuota. Se dovessimo aggiungere qualcosa tra le virgolette:
sentence.gsub(/This/, "*") #returns "* is a sample sentence."
Quindi trova e sostituisce tutte le istanze di “This” con un asterisco (*). C’è un modo per invertire anche questa funzionalità, aggiungendo un segno di omissione ( ^ ) nella parte anteriore dell’espressione regolare farà il contrario:
sentence.gsub(//, "*") #returns "********a**a**************"
Tutto (compresi gli spazi!) nella stringa che NON è una a viene sostituita con asterischi. Si noti che per applicare questa funzionalità sono necessarie le parentesi quadre (), senza di esse il gsub non farà nulla.
È possibile passare intervalli di numeri o lettere nella regex per evitare di dover digitare ogni lettera dell’alfabeto o tutti i numeri da 0 a 9.
sentence = "Th1s 1s a sampl3 s3nt3nc3."
sentence.gsub(//, "!") #these return the same thing
sentence.gsub(//, "!") # "Th!s !s a sampl! s!nt!nc!."
E per intervalli di lettere:
sentence.gsub(//, "🔥")
#returns "🔥🔥1🔥 1🔥 🔥 🔥🔥🔥🔥🔥3 🔥3🔥🔥3🔥🔥3."
A-Z include tutte le lettere maiuscole e a-z include tutte le lettere minuscole. Quindi questo gsub sta rimuovendo tutte le lettere e sostituendole con l’emoji del fuoco.
Scorciatoie
Ci sono molte scorciatoie utili disponibili per semplificare ciò che viene passato nella regex. Ecco alcuni dei più utili che ho trovato finora:
- \w per il targeting di tutte le lettere e i numeri:
lorem = "Lorem ipsum."
lorem.gsub(//, "wow") #returns "wowwowwowwowwow wowwowwowwowwow."
• \W a fare il contrario (nell’esempio sottostante è di sostituire gli spazi e il periodo fine con “wow”):
lorem.gsub(//, "wow") #returns "Loremwowipsumwow"
- \d per il targeting di tutti i numeri interi:
lorem = "L0r3m 1psum"
lorem.gsub(//, "-") #returns "L-r-m -psum."
- \D per fare il contrario
lorem.gsub(//, "-") #returns "-0-3--1-----"
Ci sono molte più combinazioni di tasti e una grande risorsa per questo che ho trovato è Rubular, ha una lista di loro e che permette di testare l’browser.
Blocchi
I blocchi possono essere usati per cambiare come .gsub si comporta. Ecco un esempio per capitalizzare ogni parola in una stringa:
cool_phrase = "slow lorises are cool"
cool_phrase.gsub(/\w+/) {|word| word.capitalize}
#returns "Slow Lorises Are Cool"
Nota: il simbolo ” + ” dopo \w sta selezionando ogni parola con 1 o più caratteri. Senza il ” + ” l’intera stringa sarebbe maiuscolo.
Ecco un altro esempio in cui il numero in una stringa viene incrementato:
year = "The year is 3100"
year.gsub(/\d+/) {|num| num.to_i + 1} #returns "The year is 3101"
Nota: anche in questo caso, il simbolo ” + ” sta selezionando ogni numero che ha 1 o più numeri nel suo complesso. Senza di esso, il ritorno sarebbe “L’anno è 4211” perché incrementerebbe ogni numero individualmente.
Casi d’uso
Le espressioni regolari vengono spesso utilizzate per convalidare o filtrare l’input dell’utente. Immagina che il tuo sito web abbia un modulo che contiene il numero di telefono di un utente. Ecco un esempio di rimozione dei simboli per ottenere solo il numero come numero intero:
phone_number = "(123)456-7890"
phone_number.gsub(/, ""/) #returns "1234567890"
Quando si ottiene il nome dell’utente, è utile ottenere solo una stringa di lettere e rimuovere tutto ciò che immettono che è un numero o un simbolo.
steve = "St97eve Brul()*)e "
steve.gsub(//, "").split(/(?=)/).join(" ")
#returns "Steve Brule"
L’esempio precedente sembra un po ‘ complesso, tuttavia tutto ciò che sta facendo è rimuovere tutti i simboli e i numeri, suddividere il risultato in un array in base a dove sono le lettere maiuscole e unirle in una stringa.
Conclusione e risorse
Espressioni regolari e.gsub sono potenti strumenti che possono migliorare il vostro programma, ma la lettura e cercando di capirli a volte può sentire come si sta leggendo geroglifici (vedi immagine sotto). Vi consiglio di prendere il vostro tempo di imparare loro e cercando di capirli uno alla volta. Fai questo e presto sarai un maestro regex!