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


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

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

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

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

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

3 266

3 ответа:

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

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

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

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

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

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

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

console.log( newStr );  // "this-is-a-test"
Если вам нужно передать переменную в качестве строки замены, вместо использования литерала regex вы можете создать объект RegExp и передать строку в качестве первого аргумента конструктора. Обычные правила экранирования строки (предшествующие специальным символам с \ при включении в строку) будут необходимы.

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) флаг

Простая демонстрация