Почему javascript заменяет только первый экземпляр при замене?

У меня есть это

 var date = $('#Date').val();

это получит значение в текстовом поле, что будет выглядеть как

12/31/2009

Теперь я делаю это на нем

var id = 'c_' + date.replace("/", '');

и результат

c_1231/2009

Он пропускает последнее '/' Я не понимаю, почему.

Ответ 1

Вам необходимо установить флаг g, чтобы заменить его глобально:

date.replace(new RegExp("/", "g"), '')
// or
date.replace(/\//g, '')

В противном случае будет заменено только первое вхождение.

Ответ 2

В отличие от библиотеки классов С#/.NET(и большинства других разумных языков), когда вы передаете String в качестве аргумента string-to-match методу string.replace, он не заменяет строку, Он преобразует строку в RegExp и выполняет подстановку регулярных выражений. Как объясняет Гумбо, для замены регулярного выражения требуется флаг g lobal, который по умолчанию не включен, чтобы заменить все совпадения за один раз.

Если вам нужна реальная замена на основе строки - например, потому что строка соответствия является динамической и может содержать символы, которые имеют особое значение в regexen - идиома JavaScript для этого:

var id= 'c_'+date.split('/').join('');

Ответ 3

Вы можете использовать:

String.prototype.replaceAll = function(search, replace) {
if (replace === undefined) {
    return this.toString();
}
return this.split(search).join(replace);
}