2012-05-15 19 views
213

tengo una cadena con múltiples comas, y la cadena de reemplazar método sólo cambiará la primera de ellas:JavaScript - Sustituir todas las comas en una cadena

var mystring = "this,is,a,test" 
mystring.replace(",","newchar", -1) 

Resultado: "thisnewcharis,a,test"

La documentación indica que el valor predeterminado reemplaza a todo, y que "-1" también indica que se reemplaza todo, pero no tiene éxito. ¿Alguna idea?

+1

¿Qué documentación? El estándar - http://es5.github.com/#x15.5.4.11 - no define un tercer parámetro, y MDN - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/ reemplazar - define un tercer parámetro no estándar como una cadena que representa banderas, no un número entero ... –

Respuesta

457

Puede usar RegExp con el indicador g.

var mystring = "this,is,a,test" 
mystring.replace(/,/g , "newchar"); 

DEMO:http://jsfiddle.net/d4N9s/

+1

Excelente respuesta./g realiza una búsqueda global de la coma y la reemplaza en una cadena completa. Funciona de esta manera, ¿estoy en lo cierto? –

+0

Puede describir detalladamente con respecto a/"Seprator"/g – MSTdev

+1

@MSTdev Esta es una típica * expresión regular * con la bandera 'g' (a.k.a. *" búsqueda global "*). El algoritmo es simple: la expresión regular encuentra TODAS las coincidencias (aquí las comas) en la cadena dada. Más información sobre expresiones regulares en JavaScript que puede encontrar en [** MDN **] (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags). – VisioN

29
var mystring = "this,is,a,test" 
mystring.replace(/,/g, "newchar"); 

Uso del (g) indicador global

Simple DEMO

+0

no funciona para var mystring = "this, is.a.test" mystring.replace (/./ g, ">"); Reemplaza toda la cadena –

+0

@DineshJain En regex dot ('.') tiene un significado especial, significa que cada carácter, y como todos los demás caracteres especiales, debe escaparse con' \ 'si desea usar su valor" literalmente ". si quiere reemplazar solo puntos, necesita usar '\ .'. – gdoron

+0

I añade el String.prototype.replaceAll = función (búsqueda, reemplazo) { \t \t \t \t \t \t \t objetivo var = esta; \t \t \t \t \t \t \t return target.replace (nuevo RegExp (buscar, 'g'), reemplazo); \t \t \t \t \t \t}; resuelve mi problema @gdoron Gracias –

107

Sólo por diversión:

var mystring = "this,is,a,test" 
var newchar = '|' 
mystring = mystring.split(',').join(newchar); 
+0

Esto funciona sin Regex, globaly, con variables y caracteres especiales (ej: '[' + variable + ']'). Genio. –

+0

es una buena respuesta, probé la función 'reemplazar' con puntos '.'pero no funciona como se esperaba, pero tu respuesta lo hizo bueno –

+1

@SrednyMCasanova eso es porque en expresiones regulares, el período es un carácter especial, y debes escapar con '\ .' Ejemplo:' var mystring = "this .,. es.,. a.,. test "; mystring.replace (/\./g, "|"); 'Ver [MDN RegExp - Significado de caracteres especiales en expresiones regulares] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp # Special_characters_meaning_in_regular_expressions) –

Cuestiones relacionadas