Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Регулярные выражения JavaScript.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
210.43 Кб
Скачать

Замена, 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

}