Quiero agregar una etiqueta (variable) a los valores con expresiones regulares, el patrón funciona bien con PHP pero tengo problemas para implementarlo en JavaScript.
El patrón es ( value
es la variable):
/(?!(?:[^<]+>|[^>]+<\/a>))\b(value)\b/is
Escapé de las barras invertidas:
var str = $("#div").html();
var regex = "/(?!(?:[^<]+>|[^>]+<\\/a>))\\b(" + value + ")\\b/is";
$("#div").html(str.replace(regex, "<a href='#" + value +">" + value + "</a>"));
Pero esto parece no estar bien, registré el patrón y es exactamente lo que debería ser. ¿Algunas ideas?
javascript
regex
string
Borstenhorst
fuente
fuente
value
una variable?Respuestas:
Para crear la expresión regular a partir de una cadena, debe usar el
RegExp
objeto de JavaScript .Si también desea hacer coincidir / reemplazar más de una vez, debe agregar la
g
marca (coincidencia global) . He aquí un ejemplo:Demostración de JSFiddle aquí.
En el caso general, escape la cadena antes de usarla como expresión regular:
Sin embargo, no todas las cadenas son expresiones regulares válidas: hay algunos caracteres especiales, como
(
o[
. Para solucionar este problema, simplemente escape la cadena antes de convertirla en una expresión regular. Una función de utilidad para eso va en el siguiente ejemplo:Demostración de JSFiddle aquí.
Nota: la expresión regular en la pregunta usa el
s
modificador, que no existía en el momento de la pregunta, pero existe , un indicador / modificadors
( dotall ) en JavaScript, hoy .fuente
s
modificador, vea nuevamente el enlace MDN en la nota de respuesta.Si está intentando utilizar un valor de variable en la expresión, debe utilizar el "constructor" de RegExp.
fuente
No necesitas
"
definir una expresión regular, así que solo:Si
value
es una variable y desea una expresión regular dinámica, entonces no puede usar esta notación; utilice la notación alternativa.String.replace
también acepta cadenas como entrada, por lo que puede hacer"fox".replace("fox", "bear");
Alternativa:
Tenga en cuenta que si
value
contiene caracteres de expresiones regulares como(
,[
y?
tendrá que escapar de ellos.fuente
Encontré este hilo útil, así que pensé en agregar la respuesta a mi propio problema.
Quería editar un archivo de configuración de base de datos (datastax cassandra) desde una aplicación de nodo en javascript y para una de las configuraciones en el archivo necesitaba hacer coincidir en una cadena y luego reemplazar la línea que la sigue.
Esta fue mi solución.
Después de ejecutarse, cambiará la configuración del directorio de datos existente a la nueva:
archivo de configuración antes:
archivo de configuración después de:
fuente
Descubrí que tenía que hacer doble barra \ b para que funcionara. Por ejemplo, para eliminar las palabras "1x" de una cadena usando una variable, necesitaba usar:
fuente
Manera mucho más fácil: use literales de plantilla.
fuente
https://jsfiddle.net/9f0mb6Lz/
Espero que esto ayude
fuente