Me gustaría crear un String.replaceAll()
método en JavaScript y estoy pensando que usar una expresión regular sería la forma más concisa de hacerlo. Sin embargo, no puedo entender cómo pasar una variable a una expresión regular. Ya puedo hacer esto, que reemplazará todas las instancias de "B"
con "A"
.
"ABABAB".replace(/B/g, "A");
Pero quiero hacer algo como esto:
String.prototype.replaceAll = function(replaceThis, withThis) {
this.replace(/replaceThis/g, withThis);
};
Pero obviamente esto solo reemplazará el texto "replaceThis"
... entonces, ¿cómo paso esta variable a mi cadena de expresiones regulares?
javascript
regex
JC Grubbs
fuente
fuente
Respuestas:
En lugar de usar la
/regex/g
sintaxis, puede construir un nuevo objeto RegExp :Puede crear dinámicamente objetos regex de esta manera. Entonces harás:
fuente
/\/word\:\w*$/
, asegúrese de escapar de sus barras invertidas:new RegExp( '\\/word\\:\\w*$' )
./
no tiene un significado especial si construye regex a partir de una cadena, por lo que no necesita escapar de él./\/word\:\w*$/
debería sernew RegExp('/word\\:\\w*$')
Como Eric Wendelin mencionó, puedes hacer algo como esto:
Esto rinde
"regex matching ."
. Sin embargo, fallará si str1 es"."
. Es de esperar que el resultado sea"pattern matching regex"
, reemplazando el período con"regex"
, pero resultará ser ...Esto se debe a que, aunque
"."
es una cadena, en el constructor RegExp todavía se interpreta como una expresión regular, es decir, cualquier carácter sin salto de línea, es decir, todos los caracteres de la cadena. Para este propósito, la siguiente función puede ser útil:Entonces puedes hacer:
cediendo
"pattern matching regex"
.fuente
-
e incluyen=!:/
.Como siempre: no use expresiones regulares a menos que sea necesario. Para reemplazar una cadena simple, el idioma es:
Entonces no tiene que preocuparse por los problemas de citas mencionados en la respuesta de Gracenotes.
fuente
split
yreplace
pueden tomar una cadena o unRegExp
objeto. El problema quereplace
tiene esosplit
no es que cuando usas una cadena solo obtienes un solo reemplazo.Si desea obtener TODAS las apariciones (
g
), no distinga entre mayúsculas y minúsculas (i
) y use límites para que no sea una palabra dentro de otra palabra (\\b
):Ejemplo:
fuente
rx
interpolación Emacs / -style, a través de cadenas de plantillas).Para cualquiera que quiera usar variables con el método de coincidencia , esto funcionó para mí
fuente
Esta:
es equivalente a esto:
Ver http://www.w3schools.com/jsref/jsref_obj_regexp.asp .
fuente
pattern
como variable, en el segundo como una cadenafuente
Desea construir la expresión regular dinámicamente y para esto la solución adecuada es usar el
new RegExp(string)
constructor. Para que el constructor trate caracteres especiales literalmente , debe escapar de ellos. Hay una función incorporada en el widget de autocompletado de jQuery UI llamada$.ui.autocomplete.escapeRegex
:Si está utilizando jQuery UI, puede usar esa función o copiar su definición de la fuente :
Y úsalo así:
fuente
Prueba con esta herramienta
fuente
Pruébalo como:
fuente
Aquí hay otra implementación de replaceAll:
fuente
Y la versión coffeescript de la respuesta de Steven Penny, ya que este es el resultado # 2 de Google ... incluso si el café es solo JavaScript con muchos caracteres eliminados ...;)
y en mi caso particular
fuente
robot.name=hubot
no es javascriptSi bien puede crear RegExp creados dinámicamente (según las otras respuestas a esta pregunta), haré eco de mi comentario en una publicación similar : la forma funcional de String.replace () es extremadamente útil y en muchos casos reduce la necesidad de objetos RegExp creados dinámicamente. (lo cual es una molestia porque tienes que expresar la entrada al constructor RegExp como una cadena en lugar de usar las barras diagonales / [AZ] + / regexp formato literal)
fuente
Para satisfacer mi necesidad de insertar una variable / alias / función en una Expresión regular, esto es lo que se me ocurrió:
donde 'oldre' es la expresión regular original en la que quiero insertar una variable, 'xx' es el marcador de posición para esa variable / alias / función, y 'yy' es el nombre, alias o función real de la variable.
fuente
Puede usar esto si $ 1 no funciona con usted
fuente
Siempre puedes usar
indexOf
repetidamente:Esto no entra en un bucle infinito cuando el reemplazo contiene la coincidencia.
fuente
Tu solución está aquí:
Pase una variable a la expresión regular.
El que he implementado es tomando el valor de un campo de texto que es el que desea reemplazar y otro es el campo de texto "reemplazar con", obteniendo el valor del campo de texto en una variable y estableciendo la variable en RegExp función para reemplazar más. En mi caso estoy usando Jquery, también puedes hacerlo solo con JavaScript.
Código JavaScript:
Este código está en el evento Onclick de un botón, puede ponerlo en una función para llamar.
Entonces ahora puede pasar variable en la función de reemplazo.
fuente
Esta función de llamada automática iterará sobre reemplacerItems usando un índice y cambiará reemplacerItems [index] globalmente en la cadena con cada pasada.
fuente
Ninguna de estas respuestas fue clara para mí. Finalmente encontré una buena explicación en http://burnignorance.com/php-programming-tips/how-to-use-a-variable-in-replace-function-of-javascript/
La respuesta simple es:
Por ejemplo:
fuente
var
aquí. Además, si pasa\b
o\1
se rompería.Para el reemplazo múltiple sin expresiones regulares, elegí lo siguiente:
La parte importante de la solución se encontró aquí.
fuente