Jaja, comencemos con algunas palabras. El año pasado usé C# para crear una herramienta de resaltado de sintaxis. Formateé el código proporcionado en HTML según la información del archivo de configuración, para que pueda mostrar la misma sintaxis en la página web. en el editor. Efecto de resaltado de elementos y soporte para plegado de código. Así es, es similar a lo que viste en el blog. Como estaba usando MSN Space en ese momento, no proporcionaba esta función, así que tuve que escribir una yo mismo.
Usé C# para escribir Al principio, usé declaraciones básicas súper engorrosas como for, while, switch, if, etc. para juzgar palabras clave, etc. No te rías de mí, era estúpido y no sabía qué. La expresión regular era en ese momento, por lo que solo puedo usar este método básico. Por supuesto, el método básico sigue siendo efectivo. Es solo un código largo en una función. Pensé que sería muy difícil de mantener. otro software no se puede escribir así, así que... Después de buscar en Google por un tiempo, encontré algunos códigos y proyectos de código abierto con resaltado de sintaxis y comencé a echar un vistazo. . . . . Vaya, todo es tan complicado. Para ser honesto, lo que más no me gusta hacer es mirar el código de otras personas. No soy pretencioso, pero es realmente confuso mirar el código de otras personas. una descripción del documento muy detallada; de lo contrario, no quiero verlo a primera vista. A lo sumo, solo miro cómo otras personas escriben la interfaz y luego adivino cómo se implementa internamente.
Aunque la búsqueda no fue muy útil, todavía me hizo saber sobre las expresiones regulares. Olvidé dónde las vi. En ese momento, comencé a estudiar expresiones regulares mientras mejoraba mis "cosas rotas". No mucho después de eso, comencé a escribir blogs nuevamente en Blog Park y finalmente habilité la función de resaltado de sintaxis de Blog Park, por lo que perdí una gran motivación para escribir mi propio código para resaltar HTML. En segundo lugar, el módulo de resaltado de sintaxis creado en C# solo se puede ejecutar en el lado del servidor o en el programa WinForm, y lo que finalmente quiero obtener es código HTML para mostrar en la página. Creo que los scripts del lado del cliente son los más adecuados para este trabajo. Es una pena que no sepa mucho sobre JS. . . Más tarde, comencé a jugar con otras cosas durante este período y no mejoré el módulo de resaltado de sintaxis.
Anoche trabajé horas extras y regresé a casa. Originalmente planeé continuar aprendiendo UML y ver los patrones. Luego recordé que la compañía tenía un módulo que necesitaba eliminar todas las etiquetas HTML en los resultados devueltos por la base de datos, así que abrí el normal. herramienta de expresión RegexBuddy. Como resultado, vi un tutorial simple sobre el uso de expresiones regulares en JScript en el documento de ayuda de RegexBuddy, por lo que mi curiosidad volvió a surgir, así que abrí UltraEdit-32 y comencé a escribir JavaScript simple para experimentar.
No repasaré los detalles de mi proceso de prueba aquí, porque muchos lugares implican pruebas repetidas y muchos desvíos. Aquí daré directamente el uso de expresiones regulares en JScript que resumí de las pruebas.
¡Basta de tonterías, vayamos al grano!
El Primer Ministro habla sobre el objeto de expresión regular RegExp de JScript.
El nombre de clase que proporciona operaciones de expresión regular en JScript es RegExp, y se pueden crear instancias de objetos del tipo RegExp de dos maneras.
Método 1, creación de instancias del constructor:
var myRegex = new RegExp(" \w +", "igm ");
//w+ es la expresión regular real. Tenga en cuenta que el primer es para escapar. igm significa ignorar mayúsculas y minúsculas, búsqueda global y búsqueda de varias líneas, respectivamente.
Método dos, método de asignación directa:
var myRegex = /w+/igm;
// El efecto es el mismo que el de la declaración anterior, excepto que no es necesario utilizar caracteres de transferencia aquí. La expresión regular original es como igm y tiene el mismo efecto que el igm en el ejemplo anterior.
El método específico utilizado depende de las preferencias de cada uno. Personalmente, creo que el segundo método es más fácil de leer al escribir expresiones regulares. El documento de ayuda de RegexBuddy también recomienda el segundo método. El objeto RegExp incluye las siguientes operaciones:
exec(string str): realiza una coincidencia de expresiones regulares y devuelve los resultados de la coincidencia. Según el ejemplo de resultados de ejecución proporcionado por MSDN, cada ejecución de exec comienza desde el final de la última coincidencia directa. El valor devuelto parece ser un objeto RerExp, y la explicación dada por RegexBuddy es devolver una matriz, pero no se proporciona ningún ejemplo detallado, creo que es más confiable según los resultados experimentales.
compilar (string regex, string flags): precompila expresiones regulares para que se ejecuten más rápido después de la prueba, la eficiencia mejora significativamente después de la precompilación. El parámetro regex es una expresión regular y los indicadores pueden ser una combinación de los siguientes tres valores: g: búsqueda global. El resultado de mi prueba es que sin agregar el indicador g, solo puede coincidir con la primera cadena calificada i: ignora el caso m. – La búsqueda de varias líneas parece ser una búsqueda de varias líneas por defecto
test(string str): si str coincide con la expresión regular, devuelve verdadero; de lo contrario, devuelve falso. Este método de coincidencia similar al objeto de cadena
RegExp contiene los siguientes atributos. :
índice: en la cadena La posición de la primera expresión coincidente, inicialmente -1
entrada: el destino coincidente de la expresión regular, tenga en cuenta que es de solo lectura
lastIndex: la posición de la siguiente expresión coincidente. La palabra original es (devuelve la posición del carácter donde comienza la siguiente coincidencia en una cadena buscada). No sé si hay un error de traducción. No he usado este atributo.
lastMatch: la última cadena que coincide con la expresión
lastParen: la última cadena de subcoincidencia coincidente. Por ejemplo, si hay varias coincidencias agrupadas por () en una expresión regular, lastParen representa el último grupo de resultados coincidentes.
leftContext: todos los caracteres desde el principio de la cadena de destino hasta la posición inicial de la última coincidencia.
rightContext: todos los caracteres desde el final de la última coincidencia hasta el final de toda la cadena de destino.
$1...$9: Indica el resultado del enésimo grupo de coincidencias. Esto es útil cuando hay varios grupos () en la expresión regular.
A continuación, hablemos de las operaciones relacionadas con el objeto String y las expresiones regulares en JScript:
match
.(expresión regular de cadena): acepta una expresión regular y devuelve si la cadena coincide con la expresión.
reemplazar (srting regex, string str): reemplaza la subcadena que coincide con la expresión regular con str. Esta función parece simple, pero también oculta un uso más avanzado. Consulte el siguiente ejemplo.
Ejemplo 1:
var str1 = "A:¡Mi nombre es Peter!nB:¡Hola Peter!";
str1 = str1.replace(/Peter/g,"Jack");
alerta(cadena1);
Este ejemplo es tan simple como reemplazar una cadena. Por supuesto, el poder de esta expresión no se limita a esto. Si tiene habilidades para usarla, también puede usarla para completar muchas tareas que antes requerían mucho código. Por ejemplo, agregue etiquetas HTML resaltadas antes y después de las palabras clave del código. Del ejemplo anterior, parece que reemplazar solo puede reemplazar el texto coincidente con texto nuevo. ¿Cómo puedo usarlo para insertar etiquetas antes y después de las palabras clave? Pensando en retrospectiva, si puede utilizar los resultados coincidentes al reemplazar, las cosas serán más fáciles. Simplemente reemplace las palabras clave con: encabezado de etiqueta + palabra clave + cola de etiqueta.
Pero, ¿cómo utilizar los resultados de la coincidencia de expresiones regulares en reemplazo?
En este momento necesitamos usar "variables coincidentes". Las variables coincidentes se utilizan para representar los resultados de la coincidencia regular. La siguiente es una descripción de las variables coincidentes:
$&: representa los resultados coincidentes de todos los grupos coincidentes. Finalmente, el grupo coincidente es el grupo () de la expresión regular.
$$: representa el carácter $ Debido a que la variable coincidente usa el carácter $, es necesario utilizar un carácter de escape.
$n: similar al $1...$9 anterior, que indica el enésimo conjunto de resultados coincidentes.
$nn -- muy simplemente el resultado del enésimo grupo de partidos
$`: es el contexto izquierdo mencionado anteriormente. Por ejemplo, si abcdefg coincide con d, entonces abc es su contexto izquierdo.
$' -- Está muy cerca de lo anterior, ¡no lo leas mal! , este es el contexto correcto. Por analogía, efg es el contexto correcto del ejemplo anterior. Así que ahora es muy sencillo para nosotros insertar etiquetas antes y después de las palabras clave:
var str1 = "A:¡Mi nombre es Peter!nB:Hola. ¡Pedro!" ;
str1 = str1.replace(/Peter/g, "<b>$&</b>");
alerta(cadena1);
Ya son las 0:39. . . Detengámonos aquí.
Descarga de software de herramienta normal (contraseña: regex): regex buddy 2.06.zip
Consulte el ejemplo que escribí: resaltado de sintaxis de JScript (simplificación de código)
Aquí hay algunos ejemplos de MSDN:
función matchDemo()
{
vars;
var re = new RegExp("d(b+)(d)","ig");
var cadena = "cdbBdbsbdbdz";
var arr = re.exec(cadena);
s = "$1 contiene: " + RegExp.$1 + "n";
s += "$2 contiene: " + RegExp.$2 + "n";
s += "$3 contiene: " + RegExp.$3;
devolución(es);
}
función PruebaExpReg()
{
var ver = Número(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
si (ver >= 5.5){
var src = "La lluvia en España cae principalmente en la llanura.";
var re = /w+/g;
vararr;
mientras ((arr = re.exec(src)) != nulo)
print(arr.index + "-" + arr.lastIndex + "t" + arr);
}
demás{
alert("Necesita una versión más reciente de JScript para que esto funcione");
}
}
función matchDemo()
{
var s; //Declarar variable.
var re = new RegExp("d(b+)(d)","ig"); //Patrón de expresión regular.
var str = "cdbBdbsbdbdz"; //Cadena a buscar.
var arr = re.exec(str); //Realiza la búsqueda.
s = "$1 devuelve: " + RegExp.$1 + "n";
s += "$2 devuelve: " + RegExp.$2 + "n";
s += "$3 devuelve: " + RegExp.$3 + "n";
s += "la entrada devuelve: " + RegExp.input + "n";
s += "lastMatch devuelve: " + RegExp.lastMatch + "n";
s += "leftContext devuelve: " + RegExp.leftContext + "n";
s += "rightContext devuelve: " + RegExp.rightContext + "n";
s += "últimoParen devuelve: " + RegExp.últimoParen + "n";
return(s); //Devuelve resultados.
}
document.write(matchDemo());
Si algún héroe que pasa por aquí tiene alguna opinión sobre este artículo, no dude en publicarla aquí. Aprendamos y progresemos juntos.