JavaScript-замена всех запятых в строке [дубликат]
На этот вопрос уже есть ответ здесь:
У меня есть строка с несколькими запятыми, и метод String replace изменит только первый:
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"
Все еще есть проблемы?
Важно отметить, что регулярные выражения используют специальные символы , которые необходимо экранировать. Например, если вам нужно экранировать символ точки (.
), вы должны использовать литерал/\./
, так как в синтаксисе регулярных выражений точка соответствует любому одиночному символу (кроме линейных Терминаторов).
Если вам нужно передать переменную в качестве строки замены, вместо использования литерала regex вы можете создать объектvar myStr = 'this.is.a.test'; var newStr = myStr.replace(/\./g, '-'); console.log( newStr ); // "this-is-a-test"
RegExp
и передать строку в качестве первого аргумента конструктора. Обычные правила экранирования строки (предшествующие специальным символам с\
при включении в строку) будут необходимы.
var myStr = 'this.is.a.test'; var reStr = '\\.'; var newStr = myStr.replace(new RegExp(reStr, 'g'), '-'); console.log( newStr ); // "this-is-a-test"