Использование регулярных выражений RegExp


Измайлов Феликс

В данной заметке не буду сильно увлекаться теорией использования регулярных выражений, а постараюсь показать практическое применение, с подробными комментариями. В данном обзоре использовались методы объекта String, которые реализуют только часть методов глобального объекта RegExp. Полное руководство по методам объекта RegExp и Regular Expression Object смотрите в MSDN. Все примеры будут рабочими, их можно проверить, если скопировать в файл с расширением js (test.js к примеру).

1. У вас есть входная строка, в которой (по замыслу разработчика) должны находится только цифры, т.е. ввод только сумм вида 1234,00 или 1234.00. Необходимо одним приемом удалять все значения кроме цифр, точки и запятой.

// Объявляем переменную типа String, хотя можно это 
// не делать, но будем придерживаться правил 
var tmp = new String(); 
// Записываем в строку неудачно введенный текст 
tmp = "123 тут что-то иное 99.00"; 
// Выдергиваем только цифры и разделитель целой и дробной части 
tmp = tmp.replace(/[^0123456789.,]/g, ""); 
// Выводим контрольное сообщение, для проверки 
WScript.echo(tmp);

Теперь подробнее что делается в этой команде. Replace принимает два параметра: первый - шаблон поиска, второй - текст, на который заменяются найденные через шаблон символы. Первый параметр - /[^0123456789.,]/g делится в свою очередь на две части, сам шаблон и флаги. Шаблон заключается в символы /. В [] заключается набор символов которые надо либо найти, либо исключить из поиска. ^ как раз обозначает, что надо найти символы, которые не входят в перечисленный список. Обратите внимание, что такое поведение символа ^ справедливо только внутри [...]. При использовании его вне скобок, назначение символа другое (об этом несколько ниже). Флаг g обозначает глобальный поиск по всей строке. Итак, команда обозначает следующее - найди все символы, которые не входят в набор (с 0 до 9, точка и запятая) и замени их на пустую строку, т.е. удали.

2. Возможен вариант, когда вы не знаете, какой разделитель дробных и целых установлен на компьютере, а привести число надо к определенному знаку, например к точке. Тогда делаем простое действие

tmp = tmp.replace(",",".");

3. Удаление начальных пробелов

tmp = tmp.replace(/^\s+/, "");

Символ ^ обозначает начало строки, \s - пробел, табуляцию, перевод страницы, новую строку или перевод строки, + значит что предшествующий символ должен встретиться в строке один или более раз.

4. Удаление конечных пробелов

tmp = tmp.replace(/\s+$/, "");

От предыдущего выражения отличается тем, что нет ^, а появляется признак $, обозначающий, что надо искать в конце строки.

В заключении небольшая хитрость. Если вы захотите использовать те или иные приемы в виде методов, к примеру: tmp.allTrim(), а allTrim выполняет какое либо действие, то определить метод можно так

String.prototype.allTrim = function() { return this.replace(/\s*/g, ""); }

что означает удаление ВСЕХ пробелов в строке.

читать еще по теме