Att använda reguljära uttryck

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.