replaceAll для JavaScript
18 марта 2008
Думаю, многим нехватает в JS такой простой функции, как заменить все вхождения в строке на что-либо. Если это так — у меня для вас подарок.
String.prototype.replaceAll = function(search, replace){ return this.split(search).join(replace); }
Пример использования:
alert("test string... test string!".replaceAll('test', 'a'));
Комментарии RSS по email OK
В JavaScript есть встроенное средство для замены подстрок - регулярные выражения:
Причем, регулярные выражения работают в несколько раз быстрее чем split().join(), особенно, если использовать одну замену много раз.
Я составил простенький тест, определяющий скорость работы обоих способов при 100 000 замен. Вот результаты теста (regexp и split.join) в мс. в разных браузерах:
FireFox: 8237 и 24555
IE 7: 4056 и 10358
Safari: 3463 и 4415
Правда в Opera ваш способ работает быстрее:
Привожу коды тестов.
Тест RegExp:
Тест split().join ():
Мой вывод: если ОЧЕНЬ важна скорость работы в ОПЕРЕ, пользуемся Вашим способом (split().join()), в остальных - регулярными выражениями: так короче и быстрее работает (кроме Оперы).
Спасибо.
Спасибо за тесты. Форматирование поправлю.
Если заменяемая подстрока содержит мета-символы регекспа, что будет*
Спасибо за гениальную функцию! Вот это наш подход!
мегакруть! спс
А как быть, если надо зареплэейсить напрмер вот это: /
Экранировать при помощи
\
.спасибо, помогло при использовании структуры someflag="anything" b=a.replaceAll(someflag, "something") а то не знал что ж делать
спасибо, очень помогло поставил на поиск. заменяю все пробелы на +
replace не заменит все совпадения, если искомое выражение является переменной.
Замечу что в nodejs работает быстрее split + join. Примерно в полтора раза.
Михаилу: str.replace(new RegExp(someVariable,'g'),replacer);
Семен, Ваш пример не сделает с глобал replace если будет так: str.replace(new RegExp('[' +someVariable ']','g'),replacer);
Или что-то в этом роде.
Класс! То, что разработчики пропустили - Вы дописали)
Спасибо тебе, товарищ! Жаль что разработчики JS сами не додумались до такого.