2016-05-04 12 views
2

Ich baue eine Js-Datei auf dem Backend für die zukünftige Verwendung und muss Makros in Js-Code konvertieren. Mein gsub in der Methode unten funktionierte gut, bis ich eine uRL mit doppelten Anführungszeichen hatte. Wenn ich eine Variable quote_type = "'" habe, wie kann ich interpolieren, dass als entkam Zitat? mit anderen Worten ..Wie kann ich entkommen "oder", wenn es eine Variable in Ruby oder Schienen ist?

"'""\'" und '"' wird meine '\"'

werden hier die bestehende Methode und ich habe gerade die Variable quote_type hinzugefügt, um dies auszuprobieren.

def substitute_timestamp_macro!(string) 
    quote_type = string[0] 
    string.gsub('[timestamp]', '\' + new Date().getTime() + \'') 
end 

edit: Beispiel Zeichenfolge wäre "https://doesntmatter.com/stuff/123;time=[timestamp]?"

bearbeiten 2: Hier ist das erwartete Ergebnis: "https://doesntmatter.com/stuff/123;time=" + new Date().getTime() + "?"

hier ist das tatsächliche Ergebnis "https://doesntmatter.com/stuff/123;time=' + new Date().getTime() + '?"

Mitteilung in meiner gsub i hart codiert ein entgangenes einfaches Zitat. Ich möchte nun die Variable verwenden, um die Eingabe Zitat übereinstimmen also, wenn es einzelne ist, verwenden Sie Single, und wenn Doppel verwenden Doppel

+0

können Sie das erwartete Ergebnis gegenüber dem tatsächlichen Ergebnis zeigen? –

+0

Was bedeutet "URL mit doppelten Anführungszeichen" hier? Ich sehe die URL, die Sie hinzugefügt haben, und meinen Sie, dass die doppelten Anführungszeichen in dieser URL im Wert und signifikant sind? Was möchten Sie als Endergebnis der Übersetzung in Anführungszeichen sehen? Können Sie ein Vorher-Nachher-Beispiel zeigen? –

+0

@maxpleaner siehe die Bearbeitung 2 – cheeseandpepper

Antwort

2

%() Betrachten Sie Ihre Schnur umwickeln:

def substitute_timestamp_macro!(string) 
    %("#{string}").gsub("[timestamp]", %(" + new Date().getTime() + ")) 
end 

Beachten Sie, dass dies ein rendert String mit entkam doppelten Anführungszeichen:

substitute_timestamp_macro!("https://doesntmatter.com/stuff/123;time=[timestamp]") 
=> "\"https://doesntmatter.com/stuff/123;time=\" + new Date().getTime() + \"?\"" 

Welche richtig interpretiert werden, wenn Sie diese an einen Puffer machen:

puts substitute_timestamp_macro!("https://doesntmatter.com/stuff/123;time=[timestamp]") 
=> "https://doesntmatter.com/stuff/123;time=" + new Date().getTime() + "?" 
+0

Das funktioniert! Ich muss einige Verbesserungen vornehmen, aber ich kann sehen, dass dies für mich funktioniert. Danke! – cheeseandpepper

+0

Kein Problem, viel Glück! –

0

Die umgebenden Anführungszeichen des Wertes das Verhalten dieser Funktion bestimmen, sollte dies die Rechnung passen:

def substitute_timestamp_macro!(string) 
    quote_type = string[0] 
    string.gsub('[timestamp]', "\\#{quote_type} + new Date().getTime() + \\#{quote_type}") 
end 
+0

Danke dafür ... unglücklicherweise in meinem Kontext muss der 'quote_type 'maskiert werden. Nun, da ich darüber nachdenke, hätte vielleicht auch ein literales Escape funktioniert?' "\\ # {quote_type}" ' – cheeseandpepper

+0

Ich sehe. Ich werde die Antwort aktualisieren, um in dieser Hinsicht korrekt zu sein. " –

+0

Und die wörtliche Escape ist die einfachste Lösung, also das, was ich verwendet habe. Danke! –

Verwandte Themen