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


353

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

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}

Ответы:


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
Вы не видели, чтобы кто-нибудь делал это, потому что это ужасная идея. Проверьте этот другой ТАК вопрос больше.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.