Замена пробелов подчеркиванием в JavaScript?

353

Я пытаюсь использовать этот код для замены пробелов на _, он работает для первого пробела в строке, но все остальные экземпляры пробелов остаются неизменными. Кто-нибудь знает почему?

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}
Нажмите Upvote
источник

Ответы:

694

Пытаться .replace(/ /g,"_");

Редактировать : или .split(' ').join('_')если у вас есть отвращение к RE

Редактировать : Джон Резиг сказал :

Если вы ищете и заменяете через строку статическим поиском и статической заменой, то быстрее выполнить действие с помощью .split ("match"). Join ("replace") - что кажется нелогичным, но ему удается работать таким образом в большинстве современных браузеров. (Существуют изменения, которые значительно повысят производительность .replace (/ match / g, "replace") в следующей версии Firefox - так что предыдущий оператор не будет долгое время.)

Свежий полумесяц
источник
1
Есть ли способ сделать это без регулярного выражения?
Нажмите Upvote
14
.split ('') .join ('_')
Crescent Fresh
7
Вместо / /gиспользования /\ /g- оба работают в Javascript. Последний работает и в CoffeeScript.
Том Лейс
27
По состоянию на 2015 .replace(/ /g,"_");быстрее, чем .split(' ').join('_').
Габриэль Томицука
8
Будущие люди, просматривающие этот @Inez, имеют ссылку для проверки обеих скоростей разделения / объединения VS. заменить. По состоянию на конец 2018 года замена значительно быстрее.
Рикс
58

Чтобы ответить на вопрос Прасанны ниже:

Как заменить несколько пробелов на один пробел в Javascript?

Вы бы использовали ту же функцию replaceс другим регулярным выражением. Выражение для пробела - это, \sа выражение «1 или более раз» - +это знак плюс, поэтому вы просто замените ответ Адама следующим:

key=key.replace(/\s+/g,"_");
Богатые
источник
31

Вы можете попробовать это

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

Он даже заменит несколько пробелов одним '-'.

Физер Хан
источник
3
Вероятно, заслуживает внимания: это также удаляет вкладки других пробелов.
Берри М.
18

Я создал для этого тест производительности JS http://jsperf.com/split-and-join-vs-replace2

Инес
источник
1
кажется, в настоящее время заменить лучший выбор
Houman
Каве - что? Хотя не все браузеры одинаковы, разделение / объединение в среднем намного лучше. На самом деле, во многих современных браузерах это звучит лучше! Спасибо Инес за настройку!
Дэвид Хобс
4
Прошло чуть больше года, и теперь этот тест в Chrome 32.0.1700.107 .. str.replace () дает гораздо лучшие результаты (на 64% быстрее)
jenovachild
12

Заменить пробелы подчеркиванием

var str = 'How are you';
var replaced = str.split(' ').join('_');

Вывод: How_are_you

Аршид К.В.
источник
3

Я знаю, что это старо, но я не видел, чтобы кто-нибудь упоминал о расширении строки prototype.

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};
Голубые глаза белый Дракон
источник
1
Вы не видели, чтобы кто-нибудь делал это, потому что это ужасная идея. Проверьте этот другой ТАК вопрос больше.
2

Просто используя replace:

var text = 'Hello World';
    
new_text = text.replace(' ', '_');
    
console.log(new_text);

Вибху Кумар
источник
3
Это просто заменит первый пробел не после этого
Нарендра