Этот метод не меняет вызывающую строку, а возвращает новую, после замен.
Чтобы произвести глобальны поиск и замену, используйте regexp c флагом "g".
Строка замены
Если вы указываете строку как второй параметр - она может включать в себя следующие специальные сочетания:
- $$
- Вставляет "$"
- $&
- Вставляет совпавшую подстроку
- $`
- Вставляет часть строки, которая предшествует совпавшей подстроке
- $'
- Вставляет часть строки, которая следует за совпавшей подстрокой
- $n или $nn, где
n/nn - десятичные цифры
- Вставляет n-ю скобку в совпадении, если первый аргумент - объект
RegExp
Функция замены
Если вы указываете функцию в качестве второго параметра, то она вызывается при каждом совпадении.
Ваша функция может динамически генерировать строку, которая заменит совпавшую подстроку. В качестве значения для замены используется результат работы функции.
Функция может использовать совпавшие подстроки - она их получает в параметрах вызова. Первый параметр всегда содержит полную совпавшую подстроку.
Если при вызове replace указано регулярное выражение, а не строка, то последующие параметры будут содержать значения скобочных групп.
Наконец, последние два параметра - позиция, на которой произошло совпадения и вызывающая строка.
Следующий пример вернет my XX, zz.
function replacer(str, p1, p2, offset, s) {
return p1 + ", " + p2;
}
newString = "my XXzz".replace(/(X+)(z+)/, replacer)
Значения параметров при вызове replacer:
- str
"XXzz" - совпавшая подстрока
- p1
"XX" - первая скобка
- p2
"zz" - вторая скобка
- offset
3 - позиция в тексте для поиска
- s
"my XXzz" - вызывающая строка, т.е строка для поиска
В следующем примере используется строка замены. Глобального поиска при этом не происходит.
Пример: строка замены
str = "тест еще тест"
str.replace("тест","прошел") // = "прошел еще тест"
Для глобального поиска используйте регулярное выражение.
Пример: Глобальная замена строки
str = "тест еще тест"
str.replace(/тест/g,"прошел") // = "прошел еще прошел"
// или так
str.replace(new RegExp("тест",'g'),"прошел")
Следующий пример использует при замене сочетания $1 и $2 для ссылок на результат поиска.
Пример: Замена со ссылками
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1") // "Smith, John"
Спасибо! И все же жаль, что нет замены без регулярных выражений...
Как нету? Есть.
'somestring\\w'.replace('\\w', '@') // → somestring@Спасиб ОГРОМНОЕ!!! Я долго думал,почему replace заменял не все строки,но когда поставил с new RegExp("тест",'g') всё пофурчало!!! СПС!!!
Опечатка:
...Чтобы произвести глобальныЙ поиск...
Для глобальной замены лучше подходит str.split(search).join(replace); и работает быстрее, и беспокоиться о спецсимволах почти не надо.
Спасибо! Долго не мог решить вопрос с вырезанием спец символов!!!
Метод split вызовет ошибку, если подстрока search не будет найдена в строке str. Т.О. сий подход не универсален. Следует это помнить!
И еще не очень удобно, потому что реальная строка будет заменена, а если это шаблонная строка? Например, {name} ест апельсины?
подскажите как можно стереть все \ \; лучше вообще все спец символы. может есть какой-то аналог addslashes или mysql_real_escape_string
А как найти в строке, скажем, 20-й символ (причем без разницы, что за символ там будет стоять) и заменить его например на "А" ?
Отправить комментарий
Приветствуются комментарии:- Полезные.
- Дополняющие прочитанное.
- Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.Для остальных вопросов и обсуждений есть форум.