Seleccione Permitir que el personaje '| Al extender la expresión regular del título del capítulo, se puede ampliar en una expresión que se aplica más que solo al título del capítulo. Sin embargo, esto no es tan directo como se esperaba. Al usar la selección, la expresión más probable para cada lado del '|' Puede pensar que las siguientes expresiones JScript y VBScript coincidirán con el 'Capítulo' o 'Sección' en las posiciones de principio y final de una fila y seguidos de uno o dos números:
/^Chapter|Section [1-9][0-9]{0,1}$/ ^Chapter|Section [1-9][0-9]{0,1}___FCKpd___0quot;Desafortunadamente, el caso real es que la expresión regular que se muestra arriba coincide con la palabra 'capítulo' al comienzo de una línea o coincide con la 'sección' al final de una línea seguida de cualquier número. Si la cadena de entrada es 'Capítulo 22', la expresión anterior solo coincidirá con la palabra 'capítulo'. Si la cadena de entrada es 'Sección 22', la expresión coincidirá con 'Sección 22'. Pero este resultado no es nuestro propósito aquí, por lo que debe haber una manera de hacer que las expresiones regulares respondan a lo que van a hacer, y de hecho es así.
Los paréntesis se pueden usar para limitar el rango de opciones, es decir, está claro que la elección solo se aplica a las dos palabras 'capítulo' y 'sección'. Sin embargo, las paréntesis también son difíciles de tratar porque también se usan para crear subexpresiones, y algunas se introducirán más adelante en la sección de subexpresiones. Al tomar la expresión regular que se muestra arriba y agregar paréntesis en la ubicación apropiada, se puede hacer la expresión regular para que coincida tanto con 'Capítulo 1' como 'Sección 3'.
La siguiente expresión regular utiliza paréntesis para agrupar el 'capítulo' y 'sección' para que la expresión funcione correctamente. Para JScript:
/^(Chapter|Section) [1-9][0-9]{0,1}$/Para VBScript:
^(Chapter|Section) [1-9][0-9]{0,1}___FCKpd___2quot;Estas expresiones funcionan correctamente y solo producen un subproducto interesante. Colocar paréntesis en ambos lados de 'Capítulo | Sección' crea una agrupación apropiada, pero también hace que una de las dos palabras sea coincidente para ser capturado para uso futuro. Dado que solo hay un conjunto de paréntesis en la expresión que se muestra arriba, solo puede haber un submatch capturado. Se puede hacer referencia a este submatch utilizando la colección de submatches de VBScript o los atributos de $ 1- $ 9 del objeto REGEXP en JScript.
A veces, capturar un submarino es deseable, a veces indeseable. En el ejemplo que se muestra en la descripción, lo que realmente desea hacer es usar paréntesis para agrupar la elección entre las palabras 'capítulo' o 'sección'. No es deseable referirse al partido más adelante. De hecho, no lo use a menos que realmente necesite capturar el subproche. Esta expresión regular será más eficiente porque no requiere tiempo y memoria para almacenar esos subprotes.
Puede usar ':' frente a los paréntesis de patrón de expresión regular para evitar almacenar esta coincidencia para uso futuro. Las siguientes modificaciones a la expresión regular que se muestra arriba proporcionan la misma funcionalidad que elimina el almacenamiento de submatch. Para JScript:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/Para VBScript:
^(?:Chapter|Section) [1-9][0-9]{0,1}___FCKpd___4quot;Además del '?:' Metacharacter, hay dos metacharacteres no capturantes utilizados para las coincidencias llamadas pre-checks . Una verificación previa del avance está representada por? =, Donde el patrón de expresión regular entre paréntesis comienza a coincidir con la cadena de búsqueda. Una verificación previa negativa se indica por '!'! '!
Por ejemplo, suponga que hay un documento que contiene referencias a Windows 3.1, Windows 95, Windows 98 y Windows NT. Asumiendo que el documento debe actualizarse buscando todas las referencias a Windows 95, Windows 98 y Windows NT y cambiando estas referencias a Windows 2000. Puede usar la siguiente expresión regular de JScript, que es una verificación previa de reenvío para que coincida con Windows 95, Windows 98 y Windows NT:
/Windows(?=95 |98 |NT )/ Para hacer la misma coincidencia en VBScript, puede usar la siguiente expresión: Windows(?=95 |98 |NT )
Una vez que se encuentra una coincidencia, la siguiente búsqueda de coincidencias comienza inmediatamente después del texto coincidente (sin incluir los caracteres utilizados en el examen previo). Por ejemplo, si la expresión que se muestra arriba coincide con 'Windows 98', la búsqueda continuará desde 'Windows' en lugar de '98'.
Una de las características más importantes de las expresiones regulares es la capacidad de almacenar una parte del patrón exitoso coincidente para su uso posterior. Recuerde que agregar paréntesis a ambos lados de un patrón de expresión regular o patrón parcial hará que la expresión parcial se almacene en un tampón temporal. Los metacharacteres no capturantes ':', '? =' O '?'! '
Cada submatch capturado se almacena como el contenido encontrado de izquierda a derecha en el patrón de expresión regular. El número de búfer que almacena subproches comienza en 1 y se numera consecutivamente hasta las 99 subexpresiones máximas. Se puede acceder a cada búfer usando '/ n ', donde N es un número decimal de uno o dos dígitos que identifica un búfer en particular.
Cita hacia atrás Una de las aplicaciones más fáciles y útiles es la capacidad de determinar dónde aparecen dos palabras idénticas en un texto en sucesión. Consulte la siguiente oración:
Is is the cost of of gasoline going up up?Según el contenido escrito, la oración anterior obviamente tiene el problema de las palabras repetidas repetidamente. Sería genial si hubiera una manera de modificar la oración sin buscar la repetición de cada palabra. La siguiente expresión regular de JScript puede lograr esta función utilizando una subexpresión.
//b([az]+) /1/b/giLa expresión de VBScript equivalente es:
/b([az]+) /1/bEn este ejemplo, la subexpresión es cada elemento entre paréntesis. La expresión capturada incluye uno o más caracteres alfabéticos, es decir, especificado por '[AZ]+'. La segunda parte de la expresión regular es una referencia a la subprota previamente capturada, es decir, la segunda ocurrencia de la palabra coincidente por la expresión adicional. '/1' se usa para especificar el primer submatch. Los caracteres del elemento límite de palabras aseguran que solo se detecten palabras individuales. Si no, las frases como se emiten o esto será reconocido incorrectamente por la expresión.
En una expresión de JScript, el indicador global ('g') siguiendo la expresión regular significa que la expresión se usará para encontrar tantas coincidencias como sea posible en la cadena de entrada. La sensibilidad del caso se especifica mediante la marca de sensibilidad del caso ('i') al final de la expresión. Las etiquetas de múltiples líneas especifican posibles coincidencias que pueden aparecer en ambos extremos de un carácter nuevo. Para VBScript, se pueden establecer varias etiquetas en expresiones, pero deben establecerse explícitamente utilizando las propiedades del objeto REGEXP .
Usando la expresión regular que se muestra arriba, el siguiente código JScript puede reemplazar la misma palabra que aparece dos veces en una cadena literal con la misma palabra usando información de subprota:
. 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); //
El código VBScript equivalente más cercano es el siguiente:
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)Tenga en cuenta que en el código VBScript, global, la sensibilidad de casos y las etiquetas de múltiples líneas se establecen utilizando las propiedades apropiadas del objeto REGEXP .
Use $ 1 en el método de reemplazo para hacer referencia al primer submatch guardado. Si hay múltiples subprocesos, puede continuar haciendo referencia con $ 2 , $ 3, etc.
Otro uso de las referencias hacia atrás es dividir un indicador de recursos común (URI) en componentes. Supongamos que desea descomponer el siguiente URI en protocolos (FTP, HTTP, etc.), dirección de nombre de dominio y página/ruta:
http://msdn.microsoft.com:80/scripting/default.htmLas siguientes expresiones regulares pueden proporcionar esta función. Para jscript, como:
/(/w+):////([^/:]+)(:/d*)?([^# ]*)/Para VBScript:
(/w+):////([^/:]+)(:/d*)?([^# ]*)La primera subexpresión adicional se utiliza para capturar la parte del protocolo de la dirección web. Esta subexpresión coincide con cualquier palabra que se encuentre ante un colon y dos cortes delanteros. La segunda subexpresión adicional captura la dirección del nombre de dominio de esa dirección. Esta subexpresión coincide con cualquier secuencia de caracteres que no incluya caracteres '^', '/' o ':'. La tercera subexpresión adicional captura el número de puerto del sitio web si se especifica el número de puerto. Esta subexpresión coincide con cero o más números seguidos de un colon. Finalmente, la cuarta subexpresión adicional captura la ruta especificada por la dirección web y/o la información de la página. Esta subexpresión coincide con uno y múltiples personajes, excepto '#' o espacio.
Después de aplicar esta expresión regular a la URI que se muestra arriba, el subpasamiento contiene lo siguiente:
Regexp. $ 1 contiene http
Regexp. $ 2 contiene msdn.microsoft.com
Regexp. $ 3 incluye: 80
Regexp. $ 4 contiene /scripting/default.htm