Выберите «Разрешить символ», чтобы выбрать среди двух или более кандидатов. Расширяя регулярное выражение названия главы, его можно расширить в выражение, которое применимо, чем просто к названию главы. Однако это не так прямо, как ожидалось. При использовании отбора наиболее вероятное выражение для каждой стороны символа '|' будет сопоставлено. Вы можете подумать, что следующие выражения JScript и VBScript будут соответствовать «главе» или «раздел» в начальных и конечных позициях строки и последующим одним или двумя числами:
/^Chapter|Section [1-9][0-9]{0,1}$/ ^Chapter|Section [1-9][0-9]{0,1}___FCKpd___0quot;К сожалению, реальным случаем является то, что регулярное выражение, показанное выше, либо соответствует слову «глава» в начале строки, либо соответствует «разделу» в конце строки, за которой следует любое число. Если входная строка - «Глава 22», приведенное выше выражение будет соответствовать только слову «Глава». Если входная строка является «Раздел 22», выражение будет соответствовать «Раздел 22». Но этот результат здесь не является нашей целью, поэтому должен быть способ сделать регулярные выражения более отзывчивыми к тому, что они собираются делать, и действительно есть такой способ.
Слобные столы могут быть использованы для ограничения диапазона выбора, то есть ясно, что выбор относится только к двум словам «глава» и «раздел». Тем не менее, с ним также трудно справиться скобки, потому что они также используются для создания подэкспрессий, а некоторые будут представлены позже в разделе о подкрасках. Принимая регулярное выражение, показанное выше, и добавив скобки в соответствующем месте, регулярное выражение может быть сделано, чтобы соответствовать как «главе 1», так и «Раздел 3».
Следующее регулярное выражение использует скобки для группы «глава» и «раздел», так что выражение работает правильно. Для JScript:
/^(Chapter|Section) [1-9][0-9]{0,1}$/Для VBScript:
^(Chapter|Section) [1-9][0-9]{0,1}___FCKpd___2quot;Эти выражения работают правильно и просто создают интересный побочный продукт. Размещение скобков по обе стороны «Глава | Раздел» создает подходящую группировку, но также приводит к тому, что одно из двух слов будет сопоставлено для того, чтобы быть захваченным для будущего использования. Поскольку в выражении, показанном выше, есть только один набор скобок, может быть только один захваченный подвод . На этот подборка можно ссылаться с использованием коллекции Submatches VBScript или атрибутов $ 1-9 $ 9 объекта Regexp в JScript.
Иногда желательно захватить подпосадку, иногда нежелательно. В примере, показанном в описании, вы действительно хотите использовать скобки, чтобы группировать выбор между словами «глава» или «раздел». Нежелательно обратиться к матчу позже. На самом деле, пожалуйста, не используйте, если вам действительно не нужно захватить подпосадку. Это регулярное выражение будет более эффективным, потому что оно не требует времени и памяти для хранения этих подборов.
Вы можете использовать '?:' Перед повседневными скобками схемы выражения, чтобы предотвратить хранение этого матча для будущего использования. Следующие модификации к регулярному выражению, указанному выше, предоставляют ту же функциональность, которая устраняет хранилище подмены. Для JScript:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/Для VBScript:
^(?:Chapter|Section) [1-9][0-9]{0,1}___FCKpd___4quot;В дополнение к «?:» Metacharacter, есть два некаптящихся метахарактера, используемых для совпадений, называемых предварительными проверками . Передняя предварительная проверка представлен? Негативная предварительная проверка обозначена '?!'
Например, предположим, что есть документ, который содержит ссылки на Windows 3.1, Windows 95, Windows 98 и Windows NT. Кроме того, предполагая, что документ должен быть обновлен, поиск всех ссылок на Windows 95, Windows 98 и Windows NT и изменив эти ссылки на Windows 2000. Вы можете использовать следующее регулярное выражение JScript, которое представляет собой передовую проверку в соответствии с Windows 95, Windows 98 и Windows NT:
/Windows(?=95 |98 |NT )/ Чтобы сделать то же самое в VBScript, вы можете использовать следующее выражение: Windows(?=95 |98 |NT )
После того, как совпадение найдено, следующий поиск матча начинается сразу после сопоставления текста (не включая символы, используемые в предварительном допросе). Например, если выражение, показанное выше, соответствует «Windows 98», поиск будет продолжаться от «Windows» вместо «98».
Одной из наиболее важных особенностей регулярных выражений является возможность хранить часть соответствующего успешного шаблона для последующего использования. Напомним, что добавление скобков к обеим сторонам регулярной схемы выражения или частичной картины приведет к сохранению частичного выражения во временном буфере. Некапрессирующие метахарактеры '?:', '? =' Или '?!'
Каждое запечатлено подводка сохраняется, когда содержимое встречается слева направо в паттерне регулярного выражения. Номер буфера, который хранит подборы, начинается с 1 и последовательно пронумеровано до максимальных 99 подэкспрессий. Доступ к каждому буферу можно получить с помощью '/ n ', где n представляет собой десятичное число с одним или двухзначным десятичным значением, которое идентифицирует определенный буфер.
Одним из самых простых и простых применений является возможность определить, где два идентичных слова появляются в тексте подряд. Пожалуйста, смотрите следующее предложение:
Is is the cost of of gasoline going up up?Согласно письменному контенту, вышеупомянутое предложение, очевидно, имеет проблему повторных слов неоднократно. Было бы здорово, если бы был способ изменить предложение, не искав повторения каждого слова. Следующее регулярное выражение JScript может достичь этой функции, используя субэкспрессию.
//b([az]+) /1/b/giЭквивалентное выражение VBScript:
/b([az]+) /1/bВ этом примере субэкспрессия - это каждый предмет между скобками. Захваченное выражение включает в себя один или несколько алфавитных символов, то есть указанный «[az]+». Вторая часть регулярного выражения-это ссылка на ранее захваченную подпосадку, то есть второе вхождение слова, соответствующего дополнительному выражению. '/1' используется для указания первого подводного соглашения. Симвовые символы граничных элементов гарантируют, что обнаружены только отдельные слова. Если нет, такие фразы, как выпускаются или это, будут неправильно признаны выражением.
В выражении JScript глобальный флаг ('g') после регулярного выражения означает, что выражение будет использоваться для поиска как можно большего количества совпадений во входной строке. Чувствительность случая определяется по знаке чувствительности случая («I») в конце выражения. Многослойные теги указывают потенциальные совпадения, которые могут появиться на обоих концах новой линии символа. Для VBScript различные теги не могут быть установлены в выражениях, но они должны быть явно установлены, используя свойства объекта Regexp .
Используя регулярное выражение, показанное выше, следующий код JScript может заменить то же слово, которое дважды появляется в буквальной строке с одним и тем же словом, используя информацию о подпочве:
VAR SS = -. var rv = ss.replace(re,$1); //var ss = Is is the cost of of gasoline going up up?./n; var re = //b([az]+) /1/b/gim; //.. var rv = ss.replace(re,$1); //
Самый близкий эквивалентный код VBScript заключается в следующем:
Dim ss, re, rv ss = Is is the cost of of gasoline going up up?. & vbNewLine Set re = New RegExp re.Pattern = /b([az]+) /1/b re.Global = True re.IgnoreCase = True re.MultiLine = True rv = re.Replace(ss,$1)Обратите внимание, что в коде VBScript, глобальной, чувствительности к случаю и многострочных тегов устанавливаются с использованием соответствующих свойств объекта Regexp .
Используйте 1 доллар в методе замены , чтобы ссылаться на сохраненный первый подвод. Если есть несколько подборов, вы можете продолжать ссылаться с 2 , 3 долларами и т. Д.
Другое использование обратных ссылок - разбить общий индикатор ресурса (URI) на компонентные части. Предположим, вы хотите разложить следующий URI на протоколы (FTP, HTTP и т. Д.), Адрес доменного имени и Page/Path:
http://msdn.microsoft.com:80/scripting/default.htmСледующие регулярные выражения могут обеспечить эту функцию. Для JScript, как:
/(/w+):////([^/:]+)(:/d*)?([^# ]*)/Для VBScript:
(/w+):////([^/:]+)(:/d*)?([^# ]*)Первая дополнительная субэкспрессия используется для захвата части протокола веб -адреса. Эта подэкспрессия соответствует любому слову, которое находится перед толстой кишкой и двумя прямыми ударами. Вторая дополнительная подэкспрессия отражает адрес доменного имени этого адреса. Эта подэкспрессия соответствует любой последовательности символов, которая не включает в себя «^», '/' или ':' символы. Третья дополнительная субэкспрессия фиксирует номер порта веб -сайта, если указан номер порта. Эта подэкспрессия соответствует нулю или более числам, за которыми следуют толстая кишка. Наконец, четвертая дополнительная подэкспрессия отражает путь, указанный в веб -адресах и/или информации о странице. Эта подэкспрессия соответствует одному и нескольким символам, кроме «#» или пространства.
После применения этого регулярного выражения к URI, показанному выше, подпоставление содержит следующее:
Regexp. $ 1 содержит http
Regexp. $ 2 содержит msdn.microsoft.com
Regexp. 3 $ включает в себя: 80
Regexp. $ 4 содержит /scripting/default.htm