web-dev-qa-db-fra.com

Javascript et les barres obliques inversées remplacent

voici ma chaîne:

var str = "This is my \string";

Voici mon code:

var replaced = str.replace("/\\/", "\\\\");

Je ne peux pas obtenir que ma sortie soit:

"This is my \\string"

J'ai essayé toutes les combinaisons auxquelles je peux penser pour l'expression régulière et la valeur de remplacement.

Toute aide est appréciée!

35
Frankie

Vous avez été bloqué par cela pendant des siècles et toutes les réponses ont continué à insister sur le fait que la chaîne source doit déjà avoir échappé des barres obliques inverses ... ce qui n'est pas toujours le cas.

Faites ceci ..

var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));
42
thegajman

La chaîne ne contient pas de barre oblique inverse, elle contient le \s séquence d'échappement.

var str = "This is my \\string";

Et si vous voulez une expression régulière, vous devez avoir une expression régulière, pas une chaîne.

var replaced = str.replace(/\\/, "\\\\");
32
Quentin

Le problème est que le\dans votre première ligne n'est même pas reconnu. Il pense que la barre oblique inverse marquera une séquence d'échappement, mais\s n'est pas un caractère d'échappement, donc il est ignoré. Votre var str est interprétée comme "c'est ma chaîne". Essayez str.indexOf("\\") - vous trouverez que c'est -1, car il n'y a aucune barre oblique inverse. Si vous contrôlez le contenu de str, faites ce que dit David - ajoutez un autre\pour échapper au premier.

9
Tesserex

Utilisez ceci

str.replace(/(\s)/g,function($0){return $0==' '?' ':'\\s'})

ou

str.replace(/ /g,'something').replace(/\s/g,'\\s').replace(/something/g,' ');

'quelque chose' peut être une combinaison de caractères qui n'est pas dans la chaîne

var str=' \s';  
  str.replace(/\s/g,'\\s'); 
// return '\\s\\s'   
  str.replace(/ /g,'SpAcE').replace(/\s/g,'\\s').replace(/SpAcE/g,' ');
// return ' \\s' 
2
user3426099

Dans le cas où vous avez plusieurs instances ou la barre oblique inverse:

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))
1
user2939415

Je n'ai pas essayé cela, mais ce qui suit devrait fonctionner

var replaced = str.replace((new RegExp("\s"),"\\s");

Essentiellement, vous ne voulez pas remplacer "\", vous voulez remplacer le caractère représenté par la séquence d'échappement "\ s".

Malheureusement, vous devrez le faire pour chaque lettre de l'alphabet, chaque chiffre, symbole, etc. afin de couvrir toutes les bases

0
Graza