Заміна пробілів на підкреслення в JavaScript?


352

Я намагаюся використовувати цей код для заміни пробілів на _, він працює для першого простору в рядку, але всі інші екземпляри пробілів залишаються незмінними. Хтось знає, чому?

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

Відповіді:


693

Спробуйте .replace(/ /g,"_");

Редагувати : або .split(' ').join('_')якщо у вас є неприязнь до RE

Редагувати : Джон Ресіг сказав :

Якщо ви шукаєте та заміняєте через рядок статичним пошуком і статичною заміною, то швидше виконати дію з .split ("відповідність"). таким чином у більшості сучасних браузерів. (Існують зміни, що дозволять значно покращити продуктивність .replace (/ match / g, "Замінити") у наступній версії 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,"_");

30

Ви можете спробувати це

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

Він навіть замінить декілька пробілів одинарним "-".


3
Можливо, варто звернути увагу: Це також знімає вкладки інших пробілів.
Беррі М.

18

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


1
здається, що зараз замінити кращий загальний вибір
Хоуман

Кейв - що? Хоча не всі браузери рівні, розділитись / приєднатися в середньому набагато краще. Насправді, у багатьох сучасних браузерах це тон краще! Дякую Інес за налаштування цього!
Девід Хобс

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
Ви не бачили, щоб хтось це робив, бо це жахлива ідея. Ознайомтеся з цим іншим питанням SO для отримання додаткової інформації

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.