2010-03-19 31 views
26

aquí está mi cadena:Javascript y barras invertidas reemplazar

var str = "This is my \string"; 

Este es mi código:

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

no puedo conseguir mi salida sea:

"This is my \\string" 

tengo intenté todas las combinaciones que se me ocurren para la expresión regular y el valor de reemplazo.

¡Se agradece cualquier ayuda!

Respuesta

29

La cadena no contiene una barra diagonal inversa, contiene la secuencia de escape \s.

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

Y si desea una expresión regular, debe tener una expresión regular, no una cadena.

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

var sustituye = str.replace (/ \\/g, "\\\\"); no es necesario que el indicador global/g sea necesario, pero si desea reemplazar cada instancia de barra invertida, así es como lo haría. – DaveH

7

El problema es que \ en su primera línea ni siquiera se reconoce. Cree que la barra invertida va a marcar una secuencia de escape, pero \ s no es un carácter de escape, por lo que se ignora. Su var str se interpreta simplemente como "This is my string". Pruebe str.indexOf("\\") - encontrará que es -1, ya que no hay barra invertida en absoluto. Si controlas el contenido de str, haz lo que dice David: agrega otro \ para escapar del primero.

+0

El problema es que no controlo el valor. Es una ruta de Windows real con la que estoy tratando (\ wp-content \ photos \ image123.jpg). La cadena se me da como "\ wp-content \ photos \ image123.jpg" pero no puedo hacer nada con ella porque las barras invertidas desaparecen. Entiendo que están siendo analizados como personajes de escape, pero no sé cómo solucionarlo. – Frankie

+1

O bien está obteniendo JS roto (en cuyo caso no puede arreglarlo) o está obteniendo una cadena en otro idioma y enviándola a JS sin escapar primero de los caracteres especiales, en cuyo caso debe arreglarlo allí. – Quentin

+0

De acuerdo, la única forma en que las secuencias de escape pueden entrar en una cadena es si la cadena está construida en javascript. Si proviene de un campo de formulario, respuesta ajax, cadena de consulta, etc., no debería necesitar escaparse. Cuando dices "la cuerda me es dada como ..." - ¿CÓMO se te proporciona realmente? – Graza

0

No he probado esto, pero la siguiente debe trabajo

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

Esencialmente no desea reemplazar "\", que desea reemplazar el carácter representado por el "\ s" secuencia de escape.

Desafortunadamente vamos a tener que hacer esto para cada letra del alfabeto, todos los números, símbolos, etc con el fin de cubrir todas las bases

+0

'" \ s "' es '" s "', por lo que también obtendrá los demás caracteres. Terminarías prefijando cada carácter en la cadena con un '\' a menos que la secuencia fuera un carácter de control. – Quentin

28

Got perplejo por esto para las edades y todas las respuestas que siguió insistiendo la cadena de origen necesita tener ya las barras diagonales inversas escapadas ... lo que no siempre es así.

Haga esto ..

var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92)); 
+1

Por el bien de la humanidad, voté esta respuesta, simplemente me salvó el día :) – iShaalan

2

Utilice esta

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

o

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

'algo' puede ser una combinación de caracteres que no está en la cadena

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

En caso de tener múltiples instancias o la barra invertida:

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92)) 
Cuestiones relacionadas