2017-08-23 7 views
2

Ich versuche, eine Zeichenfolge zu konvertieren Bindestriche (-) zwischen Wörtern und Kleinbuchstaben zu ändern. Zum Beispiel:Ändern Sie Zahlen in Zeichen mit Regex

  • Von 'ThisIsMyString' zu 'this-is-my-string'

Dies ist mein Code so weit:

def kebabize(str) 
str.gsub(/(?=[A-Z])/, '-').downcase 
end 

Ich brauche es auch Zahlen aus der Zeichenfolge zu entfernen. Beispiel:

  • Von 'ThereIs3Words' zu 'there-is-words'

Was brauche ich, um den Code hinzuzufügen, dies zu tun?

Antwort

1

Umwickeln Sie einfach einen anderen gsub drumherum:

def kebabize(str) 
str.gsub(/\d+/, '').gsub(/(?=[A-Z])/, '-').downcase 
end 
+1

Zustimmung mit der Verwendung von '\ d +' löschte meine Antwort zugunsten dieser. – SteveTurczyn

+0

@SteveTurczyn: Danke, dass du hier ein guter Sportler bist. – Jan

+0

Nicht immer ein guter Sportler ... Ich bin bekannt dafür, bei Monopoly zu betrügen! – SteveTurczyn

-1

Die Regex dies zu erfassen mit ist [AZ] [az] + | See (= [AZ] \ b?): https://regex101.com/r/popMSp/1

Erläuterung: Lese 'Wort' mit Startkapital ([AZ]), gefolgt von mehreren Untergehäuse Buchstaben ([az] +), bis Sie Großbuchstaben [AZ] begegnen oder \ b

In Code lassen Sie die Grenze Option aus, weil diese ersetzt werden muss nicht:

def addMinus(str) 
    str.gsub(/([A-Z][a-z]+(?=[A-Z]))/, "\\1-") 
end 

print addMinus('ThisIsMyString'), "\n" 
+0

Wie @Jan, auch wenn Sie eine andere Lösung als meine schätzen, brauchen Sie keine perfekte gültige Lösung zu finden. Und wenn Sie das tun, lassen Sie uns wissen, warum, so können wir alle von Ihrer Meinung/Ihrem Wissen profitieren. –

Verwandte Themen