JavaScript-заменить все запятые в строке [дубликат]

этот вопрос уже есть ответ здесь:

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

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

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

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

3 ответов


третий параметр String.prototype.replace() функция никогда не была определена как стандартная, поэтому большинство браузеров просто не реализуют ее.

лучший способ-использовать регулярные выражения С g (глобальные флаг).

var myStr = 'this,is,a,test';
var newStr = myStr.replace(/,/g, '-');

console.log( newStr );  // "this-is-a-test"

все еще есть проблемы?

важно отметить, что регулярные выражения использовать специальные символы, которые должны быть сбежал. Например, если вам нужно избежать точки (.) персонажа, вы должны использовать /\./ literal, как и в синтаксисе регулярного выражения, точка соответствует любому символу (кроме линейных Терминаторов).

var myStr = 'this.is.a.test';
var newStr = myStr.replace(/\./g, '-');

console.log( newStr );  // "this-is-a-test"

Если вам нужно передать переменную в качестве строки замены, вместо использования литерала regex вы можете создать RegExp объект и передайте строку в качестве первого аргумента конструктора. Нормальные правила escape строки (предшествующие специальные символы \ при включении в строку) будет необходимо.

var myStr = 'this.is.a.test';
var reStr = '\.';
var newStr = myStr.replace(new RegExp(reStr, 'g'), '-');

console.log( newStr );  // "this-is-a-test"

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

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

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

использовать глобальные(g) флаг

простой пример