2012-05-15 3 views
213

У меня есть строка с несколькими запятыми, а строка замены метод будет меняться только первый:JavaScript - Заменить все запятые в строке

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

Результат: "thisnewcharis,a,test"

документация указывает что значение по умолчанию заменяет все, и что «-1» также указывает на замену всех, но он не увенчался успехом. Есть предположения?

+1

Какая документация? Стандарт - http://es5.github.com/#x15.5.4.11 - не определяет третий параметр, а MDN - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/ replace - определяет нестандартный третий параметр как строку, представляющую флаги, а не целое число ... –

ответ

457

Вы можете использовать RegExp с флагом g.

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

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

+1

Отличный ответ./g делает глобальный поиск запятой и заменяет ее в целом string.It работает таким образом, я правильно? –

+0

Подробные сведения о/«Seprator»/g – MSTdev

+1

@MSTdev Это типичное * регулярное выражение * с флагом 'g' (a.k.a. *" global search "*). Алгоритм прост: регулярное выражение находит ВСЕ соответствия (здесь запятые) в данной строке. Более подробную информацию о регулярных выражениях в JavaScript вы можете найти в [** 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"); 

Используйте глобальные (g) флаг

Simple DEMO

+0

не работает для var mystring = "this, is.a.test" mystring.replace (/./ g, ">"); Он заменяет всю строку –

+0

@DineshJain В регулярной точке ('.') имеет особое значение, это означает, что каждый символ и, как и все другие специальные символы, должен быть экранирован с' \ ', если вы хотите использовать их значение буквально ». если вы хотите заменить только точки, вам нужно использовать '\ .'. – gdoron

+0

Я добавил String.prototype.replaceAll = функция (поиск, замена) {\t \t \t \t \t \t \t вар целевой = это; \t \t \t \t \t \t \t возвращение target.replace (новый RegExp (поиск, 'г'), замена); \t \t \t \t \t \t}; решает мою проблему @gdoron Спасибо –

107

Просто для удовольствия:

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

Это работает без Regex, globaly, с переменными и специальными символами (например: '[' + variable + ']'). Genius. –

+0

Это хороший ответ, я проверил функцию «replace» с точками ».'но это работает не так, как ожидалось, но вы ответили, что это хорошо. –

+1

@SrednyMCasanova, потому что в регулярном выражении период является специальным символом, и вам следует избегать его с помощью '\ .' Пример:' var mystring = "this ......, есть, а, тест "; mystring.replace (/\./ g, "|"); 'См. [MDN RegExp - Значения специальных символов в регулярных выражениях] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp # Special_characters_meaning_in_regular_expressions) –

Смежные вопросы