"JavaScript".search(/scгіpt/i);
Если аргумент метода search()
не является регулярным выражением, он сначала преобразуется путем передачи конструктору RegExp
. Метод search()
не поддерживает глобальный поиск и игнорирует флаг g
в своем аргументе.
Метод replace()
выполняет операцию поиска с заменой. Он принимает в качестве первого аргумента регулярное выражение, а в качестве второго - строку замены.
Метод отыскивает в строке, для которой он вызван, соответствие указанному шаблону. Если регулярное выражение содержит флаг g
, метод герlасе()
заменяет все найденные совпадения строкой замены. В противном случае он заменяет только первое найденное совпадение. Если первый аргумент метода герlасе()
является строкой, а не регулярным выражением, то метод выполняет буквальный поиск строки, а не преобразует его в регулярное выражение с помощью конструктора RegExp(),
как это делает метод search().
В качестве примера мы можем воспользоваться методом replace()
для единообразной расстановки прописных букв в слове «JavaScript» для всей строки текста:
// Независимо от регистра символов заменяем словом в нужном регистре
text.replace(/JavaScript/gi, "JavaScript");
Метод replace()
представляет собой более мощное средство, чем можно было бы предположить по этому примеру. Напомню, что подвыражения в скобках, находящиеся внутри регулярного выражения, нумеруются слева направо, и что регулярное выражение запоминает текст, соответствующий каждому из подвыражений. Если в строке замены присутствует знак $
с цифрой, метод replace()
заменяет эти два символа текстом, соответствующим указанному подвыражению. Это очень полезная возможность. Мы можем использовать ее, например, для замены прямых кавычек в строке типографскими кавычками, которые имитируются ASCII-символами:
// Цитата - это кавычка, за которой следует любое число символов, отличных от кавычек
// (их мы запоминаем), за этими символами следует еще одна кавычка,
var quote = /'([~"]*/g;
// Заменяем прямые кавычки типографскими и оставляем без изменений
// содержимое цитаты, хранящееся в $1.
text. replace(quote, "«$1»");
Метод replace()
предоставляет и другие ценные возможности, о которых рассказывается в третьей части книги, в справке к методу String.replace().
Самое важное, что следует отметить, - второй аргумент replace()
может быть функцией, динамически вычисляющей строку замены.
Метод match()
- это наиболее общий из методов класса String
, использующих регулярные выражения. Он принимает в качестве единственного аргумента регулярное выражение (или преобразует свой аргумент в регулярное выражение, передав его конструктору RegExp()
) и возвращает массив, содержащий результаты поиска. Если в регулярном выражении установлен флаг g, метод возвращает массив всех соответствий, присутствующих в строке. Например:
"1 плюс 2 равно 3".match(/\d+/g) // вернет ["1", "2", "3"]
Если регулярное выражение не содержит флаг g
, метод match()
не выполняет глобальный поиск; он просто ищет первое совпадение. Однако match()
возвращает массив, даже когда метод не выполняет глобальный поиск. В этом случае первый элемент массива - это найденная подстрока, а все оставшиеся элементы представляют собой подвыражения регулярного выражения. Поэтому если match()
возвращает массив а, то а[0] будет содержать найденную строку целиком, а[1] -подстроку, соответствующую первому подвыражению, и т. д. Проводя параллель с методом replace(),
можно сказать, что в а[n] заносится содержимое $n.
Например, взгляните на следующий программный код, выполняющий разбор URL-адреса:
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "Посетите мою домашнюю страницу http://www.exarnple.com/"david ";
var result = text.match(url);
if (result != null) {
var fullurl = result[0]; // Содержит " http://www.example.com/"david "
var protocol = result[1]; // Содержит "http"
var host = result[2]; // Содержит " www.example.com "
Читать дальше
Конец ознакомительного отрывка
Купить книгу