Javascript - Remplacement du caractère d'échappement dans un littéral de chaîne
Je suis en train de remplacer la barre oblique inverse (escape) de caractères en Javascript est un littéral de chaîne.
J'ai besoin de la remplacer par une double barre oblique inverse pour que je puisse ensuite faire une redirection:
var newpath = 'file:///C:\funstuff\buildtools\viewer.html'.replace(/\\/g,"\\");
window.location = newpath;
Cependant, il ne semble pas avoir de résultat.
Je n'ai pas la possibilité de bien s'échapper de la antislash avant qu'ils sont manipulés par du Javascript.
Comment puis-je replace ( \ ) ( \ \ ), de sorte que Javascript soit heureux?
Grâce,
Derek
source d'informationauteur dbasch
Vous devez vous connecter pour publier un commentaire.
Si c'est un littéral, vous avez besoin d'échapper les barres obliques inverses avant Javascript voit; il n'y a pas moyen de contourner cela.
Si
newpath
est la valeur de quelque chose, et vraiment ne contiennent des barres obliques inverses, vous n'avez pas besoin de double, mais si tu voulais vraiment pour une raison quelconque, n'oubliez pas d'échapper à la antislashs le remplacer() appel:Pourquoi n'avez vous pas la possibilité de bien s'échapper de la antislash avant qu'ils sont manipulés par du Javascript? Si le problème est que votre Javascript est généré à partir d'un autre langage de script qui elle-même utilise \ comme un caractère d'échappement, il suffit d'ajouter un niveau d'échapper:
Vous devez être remplacer par "\\\\" parce que "\\" s'échapper dans un seul \ donc pas de changement.
De mieux mettre en évidence et de comprendre les chaîne d'échappement comportementprenons l'exemple suivant:
Vous pouvez voir ce que la chaîne se présente comme dans la mémoire après avoir été analysé par le JS-moteur par le fractionnement de la chaîne, donc aussi en proposant des pistes (laid) des solutions autour de cette question:
Fondamentalement, la seule barre oblique inverse s'échappe le caractère suivant, donnant lieu à des résultats inattendus, si l'échappement-contexte n'est pas pris en compte.
Solution:
À travers une look-up-table, vous pouvez restaurer les errantly des caractères d'échappement s'ils se trouvent à l'extérieur de l'ASCII imprimables de la gamme de caractères de
\x20-\x7F
. Pour l'exemple ci-dessus par exemple,12
ou\x0c
[12..toString(16)
] deviendrait'\\'+'v'
et ainsi de suite.PS: Être conscient que la perte de l'information s'est produite, et que vous essayez de restaurer les informations à travers contextuelle - ou méta - information, qui signifie dans votre cas, la chaîne est dans l'ASCII imprimables gamme.
Merci de partager tous les implantations avec la communauté. Cheers!
<< Caractères d'Échappement de Remplacement>>