2016-07-10 13 views
2

String alle Teilstrings mit RegexMuster Anpassung extrahieren:Lorem ipsum {{dolor}} sit {{amet}}, consectetur adipisicing {{elit}},Wie in Elixier

Ich möchte extrahieren Sie eine Liste aller Tags, die in eingewickelt werden {{}} von oben Zeichenfolge und die Arbeit an ihnen also mitgeteilte db, wenn sie existieren oder nicht, und ersetzen Sie sie dann als Markdown-Link wie folgt.

[substring](/tag/:substring_id) 

ich kann sie mit

String.replace(string, ~r/\{\{.+?\}\}/, "new substring") 

ersetzen, aber das mir nicht helfen, weil ich auf Teil arbeiten können nicht die db d.h zu überprüfen.

Ich habe keine String.scan oder String.find Art von Funktionen gefunden, die Teilstrings als Liste zurückgibt. Wenn Sie wissen, wie es geht, lassen Sie es mich bitte wissen.

Vielen Dank im Voraus für Ihre Mühe und Zeit :)

+0

Ist die Zeichenfolge konstant außer dem Teil im {{}} Teil? Ich frage, denn wenn es konstant ist, könntest du auch Mustervergleiche verwenden. –

Antwort

4

Sie Regex.replace/4 mit einer Funktion als Ersatz verwenden können:

db = %{"dolor" => 1, "elit" => 2} 

string = "Lorem ipsum {{dolor}} sit {{amet}}, consectetur adipisicing {{elit}}," 

Regex.replace(~r/{{(.+?)}}/, string, fn whole, tag -> 
    if id = db[tag] do 
    "[#{tag}](/tag/#{id})" 
    else 
    whole 
    end 
end) |> IO.puts 

Ausgang:

Lorem ipsum [dolor](/tag/1) sit {{amet}}, consectetur adipisicing [elit](/tag/2), 
3

Sie können die Regex.scan/3 Funktion Wenn Sie den übereinstimmenden Regex-Ausdruck einfach in eine Liste von Werten extrahieren möchten.

Regex.scan(~r/\{\{.+?\}\}/, string) 
#[["{{dolor}}"], ["{{amet}}"], ["{{elit}}"]]