- •Регулярные выражения
- •Объект RegExp
- •Спецсимволы в регулярном выражении
- •Проверка результатов: метод test
- •Поиск совпадений: метод exec
- •Строковые методы, поиск и замена
- •Метод search(regexp)
- •Метод match(regexp)
- •Замена, replace
- •Спецсимволы в строке замены
- •Замена через функцию
- •Статичные регэкспы
Замена, replace
Метод replace может заменять вхождения регулярного выражения не только на строку, но и на результат выполнения функции. Его полный синтаксис - такой:
var newString = str.replace(regexp/substr, newSubStr/function) |
regexp
Объект RegExp. Его вхождения будут заменены на значение, которое вернет параметр номер 2
substr
Строка, которая будет заменена на newSubStr.
newSubStr
Строка, которая заменяет подстроку из аргумента номер 1.
function
Функция, которая может быть вызвана для генерации новой подстроки (чтобы подставить ее вместо подстроки, полученной из аргумента 1).
Метод replace не меняет строку, на которой вызван, а просто возвращает новую, измененную строку.
Чтобы осуществить глобальную замену, включите в регулярное выражение флаг "g".
Если первый аргумент - строка, то она не преобразуется в регулярное выражение, так что, например,
var ab = "a b".replace("\\s","..") // = "a b" |
Вызов replace оставил строку без изменения, т.к искал не регулярное выражение \s, а строку "\s".
Спецсимволы в строке замены
В строке замены могут быть такие спецсимволы:
Pattern |
Inserts |
$$ |
Вставляет "$". |
$& |
Вставляет найденную подстроку. |
$` |
Вставляет часть строки, которая предшествует найденному вхождению. |
$' |
Вставляет часть строки, которая идет после найденного вхождения. |
$n or $nn |
Где n или nn - десятичные цифры, вставляет подстроку вхождения, запомненную n-й вложенной скобкой, если первый аргумент - объект RegExp. |
Замена через функцию
Если Вы указываете вторым параметром функцию, то она выполняется при каждом совпадении.
В функции можно динамически генерировать и возвращать строку подстановки.
Первый параметр функции - найденная подстрока. Если первым аргументом replaceявляется объект RegExp, то следующие n параметров содержат совпадения из вложенных скобок. Последние два параметра - позиция в строке, на которой произошло совпадение и сама строка.
Например, следующий вызов replace возвратит XXzzzz - XX , zzzz.
1 |
function replacer(str, p1, p2, offset, s) |
|
2 |
{ |
|
3 |
return str + " - " + p1 + " , " + p2; |
|
4 |
} |
|
5 |
var newString = "XXzzzz".replace(/(X*)(z*)/, replacer) |
Как видите, тут две скобки в регулярном выражении, и потому в функции два параметра p1, p2. Если бы были три скобки, то в функцию пришлось бы добавить параметр p3.
Следующая функция заменяет слова типа borderTop на border-top:
1 |
function styleHyphenFormat(propertyName) |
|
2 |
{ |
|
3 |
function upperToHyphenLower(match) |
|
4 |
{ |
|
5 |
return '-' + match.toLowerCase(); |
|
6 |
} |
|
7 |
return propertyName.replace(/[A-Z]/, upperToHyphenLower); |
|
8 |
} |
|
