length - ruby string replace




Ruby String Sub ohne Regex-Referenzen (3)

Ich versuche in Ruby ein einfaches String-Sub zu machen.

Das zweite Argument von sub () ist ein langes Stück minimierten JavaScript, in dem reguläre Ausdrücke enthalten sind. Rückverweise in der Regex in dieser Zeichenfolge scheinen das Ergebnis von sub zu beeinflussen, da die ersetzte Zeichenfolge (dh das erste Argument) in der Ausgabezeichenfolge erscheint.

Beispiel:

input = "string <!--tooreplace--> is here"
output = input.sub("<!--tooreplace-->", "\&")

Ich möchte, dass die Ausgabe wie folgt aussieht:

"string \& is here"

Nicht:

"string & is here"

oder wenn Sie der Regex entkommen

"string <!--tooreplace--> is here"

Im Grunde möchte ich eine Möglichkeit, eine String-Sub zu erstellen, die überhaupt keine Regex-Konsequenzen hat - nur eine einfache String-Ersetzung.


Nun, da '\\&' (dh \ gefolgt von & ) als spezielle Regex-Anweisung interpretiert wird, liegt es nahe, dass Sie den Backslash umgehen müssen. In der Tat funktioniert das:

>> puts 'abc'.sub 'b', '\\\\&'
a\&c

Beachten Sie, dass \\\\& die \\\\& \\& .


Sie können auch die Blocknotation verwenden, um es einfacher zu machen (im Gegensatz zu Regexp.escape):

=> puts input.sub("<!--tooreplace-->") {'\&'}
string \& is here

Verwenden Sie Regex.escape , um zu vermeiden, dass Sie herausfinden müssen, wie Sie die Ersetzungszeichenfolge Regex.escape . Es ist praktisch, wenn der Austausch kompliziert ist oder der Umgang damit unnötig ist. Ein kleiner Helfer auf String ist auch nett.

input.sub("<!--toreplace-->", Regexp.escape('\&'))




replace