Hoy encontré un problema: cómo resaltar palabras clave que no distinguen entre mayúsculas y minúsculas en una página web. Por ejemplo: texto abcaBcabCaBCabcaBCa, palabra clave bc, en caso de que no se distingan entre mayúsculas y minúsculas, hay un total de 6 coincidencias.
Entonces lo que se muestra en la página web es abcaBcabCaBCabcaBCa.
Mucha gente piensa en la función de reemplazo. El prototipo es
Reemplazar (cadena, buscar, reemplazar con [, iniciar [, contar [, comparar]]])
cadena requerida, expresión de cadena, que contiene la subcadena que se va a reemplazar
encontrar la opción requerida, la subcadena que se busca
Se requiere reemplazar con, la subcadena utilizada para el reemplazo.
inicio opcional, la posición para comenzar a buscar subcadenas, el valor predeterminado es 1
contar opcional, el número de reemplazos de subcadenas a realizar, el valor predeterminado es -1, lo que indica todos los reemplazos posibles
comparar opcional, modo de comparación, 0: comparación binaria 1: comparación de texto;
Aunque el último parámetro puede resolver el problema de la insensibilidad entre mayúsculas y minúsculas, ¿qué debería reemplazarse?
Porque según el ejemplo, se han buscado bc, Bc, bC y BC, pero no se pueden reemplazar de manera uniforme con un solo texto.
Entonces, usa la función Instr para ayudarnos.
Busque desde la cadena de origen, de izquierda a derecha, cada vez que encuentre una coincidencia. Solo sigue los tres pasos.
1. Genere la cadena a la izquierda del elemento coincidente.
2. Aplique el elemento coincidente al estilo <span> y envíelo
3. Repita los dos pasos anteriores y continúe buscando la cadena de la derecha hasta el final de la búsqueda.
El código es el siguiente:
Copie el código de código de la siguiente manera:
función pública Resaltar(S,F)
tenue tL,tM,tR,k
tL=
tM=
tR=S
k=instr(1,tR,F,1)
hacer mientras k>0
tL=tL & izquierda(tR,k-1)
tM=medio(tR,k,len(F))
tL=tL & <span style='color:rojo'> & tM & </span>
tR=derecha(tR,Len(tR)-len(F)-k+1)
k=instr(1,tR,F,1)
bucle
Resaltado=tL y tR
función final
Al llamar, el código es el siguiente:
Copie el código de código de la siguiente manera:
tS=abcaBcabCaBCabcaBCa
tF=bc
respuesta.Escribir(tS)
respuesta.Escribir(<br/>)
respuesta.Escribir(Resaltar(tS,tF))
De esta manera, el ejemplo al principio parece
Por otro lado, ¿pensando en si es más conveniente utilizar expresiones regulares? Lo intenté varias veces sin resultado. Veamos qué experto utiliza reglas regulares para resolver este problema.
Después de escribir el artículo, el internauta Yugong dio una solución a la expresión regular. Probado y comprobado que es correcto. Ahora su código está pegado a continuación. Muchas gracias a él.
código
Copie el código de código de la siguiente manera:
Función resaltada (S,F)
expresión regular tenue
Establecer expresión regular = nueva expresión regular
regEx.IgnoreCase = Verdadero
regEx.Global = Verdadero
regEx.Patrón = ( & F & )
Resaltado = regEx.Replace(S,<span style='color:red'>$1</span>)
Función final
Respuesta.escribir resaltado (abcaBcabCaBCabcaBCa,bc)