Clojure:
Att använda reguljära uttryck
Hur:
Clojure, som håller sig trogen till sina rötter i Lisp-familjen, erbjuder ett rikt utbud av funktioner som integrerar sömlöst med Javas möjligheter för reguljära uttryck. Så här kan du utnyttja dem:
Grundläggande matchning
För att kontrollera om en sträng matchar ett mönster, använd re-matches
. Den returnerar hela matchningen om den lyckas eller nil
annars.
(re-matches #"\d+" "123") ;=> "123"
(re-matches #"\d+" "abc") ;=> nil
Söka efter mönster
För att hitta den första förekomsten av ett mönster är re-find
din funktion att gå till:
(re-find #"\d+" "Order 123") ;=> "123"
Fånga grupper
Använd re-find
tillsammans med parenteser i ditt mönster för att fånga grupper:
(let [[_ area code] (re-find #"(1)?(\d{3})" "Telefon: 123-4567")]
(println "Riktnummer:" area "Kod:" code))
;; Utdata: Riktnummer: nil Kod: 123
Global sökning (Hitta alla träffar)
Clojure har inte en inbyggd global sökning som vissa språk. Använd istället re-seq
för att få en lös följd av alla träffar:
(re-seq #"\d+" "id: 123, antal: 456") ;=> ("123" "456")
Dela upp strängar
För att dela upp en sträng baserat på ett mönster, använd clojure.string/split
:
(clojure.string/split "John,Doe,30" #",") ;=> ["John" "Doe" "30"]
Ersätta
Ersätt delar av en sträng som matchar ett mönster med clojure.string/replace
:
(clojure.string/replace "2023-04-01" #"\d{4}" "ÅÅÅÅ") ;=> "ÅÅÅÅ-04-01"
Tredjepartbibliotek
Även om Clojures inbyggda stöd räcker för de flesta fall, för mer komplexa scenarier, överväg att använda bibliotek som clojure.spec
för robust datavalidering och reagent
för reaktiv DOM-manipulation i webbapplikationer med regex-baserad routing och validering av inmatning.
;; Exempel med användning av clojure.spec för att validera en e-postadress
(require '[clojure.spec.alpha :as s])
(s/def ::email (s/and string? #(re-matches #".+@.+\..+" %)))
(s/valid? ::email "[email protected]") ;=> sant
Kom ihåg, även om reguljära uttryck är kraftfulla, kan de också göra koden svårläst och svår att underhålla. Använd dem med omdöme och överväg alltid enklare strängmanipuleringsfunktioner där det är möjligt.