Wie kann ich Backslashes (\) in einer Zeichenfolge verwenden?

Ich habe viele Möglichkeiten ausprobiert, um einen einzelnen Backslash von einer ausgeführten zu bekommen (ich meine keine Eingabe von html ).

Ich kann Sonderzeichen als Tab, neue Zeile und viele andere erhalten und sie dann in \\t oder \\n oder \\(someother character) aber ich kann keinen einzigen Backslash bekommen, wenn ein nicht-spezielles Zeichen daneben steht.

Ich möchte nicht etwas wie:

 str = "\apple"; // I want this, to return: console.log(str); // \apple 

und wenn ich versuche, Zeichen bei 0 zu bekommen, dann bekomme ich statt \ .

    (Siehe ES2015 Update am Ende der Antwort.)

    Sie haben Ihre Frage sowohl mit string als auch mit regex markiert.

    In JavaScript hat der umgekehrte Schrägstrich eine besondere Bedeutung sowohl in Zeichenfolgenliteralen als auch in regulären Ausdrücken. Wenn Sie einen tatsächlichen Backslash in der Zeichenfolge oder Regex möchten, müssen Sie zwei schreiben: \\ .

    Diese Zeichenfolge beginnt mit einem umgekehrten Schrägstrich, der erste, den Sie im Literal sehen, ist ein Escape-Zeichen, das uns anweist, das nächste Zeichen wörtlich zu nehmen:

     var str = "\\I have one backslash"; 

    Dieser reguläre Ausdruck entspricht einem einzelnen umgekehrten Schrägstrich (nicht zwei). Wiederum ist der Erste, den Sie im Literal sehen, ein Escape-Zeichen, das uns sagt, dass wir das nächste Zeichen wörtlich nehmen müssen:

     var rex = /\\/; 

    Wenn Sie eine Zeichenfolge verwenden, um einen regulären Ausdruck zu erstellen (statt wie zuvor ein Literal für einen regulären Ausdruck zu verwenden), beachten Sie, dass es sich um zwei Ebenen handelt: Die Zeichenfolgenebene und die Ebene für reguläre Ausdrücke. Um also einen regulären Ausdruck zu erstellen, der eine Zeichenkette verwendet, die einem einzelnen umgekehrten Schrägstrich entspricht, verwenden Sie vier :

     // Matches *one* backslash var rex = new RegExp("\\\\"); 

    Das liegt daran, dass Sie zuerst ein Zeichenfolgenliteral schreiben, aber Sie möchten Backslashes darin einfügen. Also tust du das mit \\ für jeden Backslash, den du willst. Aber Ihre Regex erfordert auch zwei \\ für jeden echten Backslash, den Sie möchten, und so müssen zwei Backslashes in der Zeichenfolge angezeigt werden. Also insgesamt vier. Dies ist einer der Gründe, warum ich es vermeide, new RegExp(string) wann immer ich kann; Ich werde leicht verwirrt. 🙂

    ES2015 Aktualisierung

    Schnell auf das Jahr 2015, und Dolphin_Wood weist darauf hin, dass der neue ES2015-Standard Vorlagenliterale, Tag-functionen und die function String.raw :

     // Yes, this unlikely-looking syntax is actually valid ES2015 let str = String.raw`\apple`; 

    str endet mit den Zeichen \ , a , p , p , l und e darin. Seien Sie vorsichtig, es gibt kein ${ in Ihrer “Zeichenkette” (Vorlage), da dies ein Vorlagenliteral ist und ${ eine Substitution startet. Z.B:

     let foo = "bar"; let str = String.raw`\apple${foo}`; 

    … endet als \applebar . Beachten Sie auch, dass dies nicht wie “verbatim” -Strings in C # oder ähnlich ist, da Sequenzen, die der LegacyOctalEscapeSequence in der Spezifikation entsprechen, nicht zulässig sind und einen Syntaxerrors verursachen. Also zum Beispiel

     // Fails let str = String.raw`c:\foo\12\bar`; 

    … schlägt fehl, weil \12 wie ein altes Oktal-Literal aussieht.

    \ ist ein Escape-Zeichen, gefolgt von einem nicht-speziellen Zeichen wird es kein Literal \ . Stattdessen müssen Sie es verdoppeln.

     console.log("\apple"); //-> "apple" console.log("\\apple"); //-> "\apple" 

    Es gibt keine Möglichkeit, die ursprüngliche, unverarbeitete Zeichenketten-Definition zu erhalten oder eine literale Zeichenkette ohne Escape-Zeichen zu erstellen.

    Versuchen Sie String.raw Methode:

     str = String.raw`\apple` // "\apple" 

    Referenz hier: String.raw ()

    str = "\apple" entkommt dem ersten a , so dass du als erstes ein Zeichen hast. Es gibt keine Möglichkeit (afaik), dass "\apple" das "\apple" behält, ohne es zu umgehen. Sie könnten die Flucht jedoch so automatisieren:

     String.prototype.esc = function(){ return '\\'+this; } //and use it as var str = 'a'.esc()+'pple'; //or var str = 'apple'.esc(); //tests str[0]; //=> '\' str.match(/\\/); //=> ['\'] RegExp('\\\\').test(str); //=> true str.substr(0,1); // '\'