* | Предыдущий символ повторяется любое число раз (в том числе ни разу). Например, выражению zo* соответствуют как 'z', так и 'zoo' |
+ | Предыдущий символ повторяется не менее одного раза. Например, выражению zo+ соответствует 'zoo', но не 'z' |
? | Предыдущий символ повторяется не более одного раза |
. (точка) | Любой символ, кроме перевода строки |
х|у | Либо символ 'х', либо символ 'у'. Например, выражению z| food соответствуют 'z' или 'food' |
[xyz] | Множество символов. Означает любой один символ из набора символов, заключенных в квадратные скобки. Например, выражению [abc] соответствует символ 'а' в слове 'plain' |
[a-z] | Диапазон символов. Означает любой один символ из заданного диапазона. Например, выражению [a-z] соответствует любая буква английского алфавита в нижнем регистре |
[^m-z] | Означает любой символ, не входящий в заданный диапазон. Например, выражению [^m-z] соответствует любой символ, не попадающий в диапазон символов от 'm' до 'z' |
| Граница слова, т.е. позиция между словом и пробелом. Например, выражению er соответствует символ 'er' в слове 'never', но не в слове 'verb' |
В | Позиция внутри слова (не на границе). Например, выражению еа*rB соответствует подстрока 'ear' в 'never early' |
d | Символ, обозначающий цифру. Эквивалентно [0-9] |
D | Любой символ, кроме цифры. Эквивалентно [^0-9] |
Метасимволы можно употреблять совместно, например, комбинация '.*'
означает любое число любых символов.
Более подробную информацию о регулярных выражениях можно найти, например, в документации Microsoft по языку VBScript.
В качестве примера использования регулярных выражений в листинге 5.18 приведен сценарий FindRegExp.js, в котором производится поиск в подкаталоге ForFind текущего каталога всех файлов, имена которых начинаются с символов 'П', 'А' или 'И' и имеют расширение txt.
Для получения доступа к каталогу ForFind в сценарии используется метод GetFolder
объекта FileSystemObject
:
//Создаем объект WshShell
WshShell=WScript.CreateObject('WScript.Shell');
//Создаем объект FileSystemObject
FSO=WScript.CreateObject('Scripting.FileSystemObject');
//Создаем объект Folder для доступа к подкаталогу ForFind
//текущего каталога
Folder = FSO.GetFolder(WshShell.CurrentDirectory+'\ForFind');
Поиск нужных файлов будет выполняться с помощью следующего регулярного выражения:
//Создаем регулярное выражение (объект RegExp)
RegEx=new RegExp('^[ПАИ].*.txt$', 'i');
Сам поиск и вывод имен найденный файлов производятся в функции FindFilesInFolder (
. Здесь сначала инициализируются счетчик найденных файлов и переменная, в которой будут сохраняться имена найденных файлов, а также создается объект Enumerator
(переменная Files
) для доступа к файлам каталога Fold
ColFind=0; //Счетчик найденных файлов
SFileNames=''; //Строка с именами файлов
//Создаем коллекцию файлов в каталоге Fold
Files=new Enumerator(Fold.Files);
Элементы коллекции просматриваются в цикле while
:
//Цикл по всем файлам в коллекции
while (!Files.atEnd()) {
Files.moveNext(); //Переходим к следующему файлу
}
Для текущего файла в коллекции выделяется его имя, которое затем с помощью метода test
объекта RegExp
проверяется на соответствие заданному регулярному