¿Reemplazar Javascript con referencia al grupo coincidente?

228

Tengo una cadena, como hello _there_. Me gustaría reemplazar los dos guiones bajos con <div>y </div>respectivamente, usando JavaScript . La salida se vería (por lo tanto) hello <div>there</div>. La cadena puede contener múltiples pares de guiones bajos.

Lo que estoy buscando es una manera de cualquiera de ejecutar una función en cada partido, la forma en Rubí lo hace:

"hello _there_".gsub(/_.*?_/) { |m| "<div>" + m[1..-2] + "</div>" }

O puede hacer referencia a un grupo coincidente, de nuevo de la manera en que se puede hacer en ruby:

"hello _there_".gsub(/_(.*?)_/, "<div>\\1</div>")

¿Alguna idea o sugerencia?

Sinan Taifour
fuente

Respuestas:

384
"hello _there_".replace(/_(.*?)_/, function(a, b){
    return '<div>' + b + '</div>';
})

Oh, o también podrías:

"hello _there_".replace(/_(.*?)_/, "<div>$1</div>")
airportyh
fuente
10
¿Utiliza Javascript en $1lugar de \1? ¿Alguien proporcionaría un enlace a la documentación?
daveloyall
3
replacementValuepuede ser una función y se pasan diferentes argumentos basados ​​en los grupos de captura? ¡Asombroso!
daveloyall
44
encontré que \ 1 funcionó pero $ 1 NO funcionó aunque estoy usando la variación RegExp: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jsh
1
@CalculatorFeline Decir "la expresión regular en sí misma" no identifica cuál, ya que alguien podría estar tratando de usar una expresión regular para el reemplazo. Tiene que haber muchas personas que tratan de hacer esto: "hello _there_".replace(/_(.*?)_/, /<div>\1<\/div>/).
Stewart
2
La documentación sobre la función reemplaza developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Naramsim
35

Puedes usar en replacelugar de gsub.

"hello _there_".replace(/_(.*?)_/g, "<div>\$1</div>")
Eifion
fuente
19
Puede eliminar la barra invertida.
CalculatorFeline
7

Para la cadena de reemplazo y el patrón de reemplazo según lo especificado por $. aquí un currículum:

ingrese la descripción de la imagen aquí

enlace al documento: aquí

"hello _there_".replace(/_(.*?)_/g, "<div>$1</div>")



Nota:

Si desea tener un $en la cadena de reemplazo, use $$. Igual que con el sistema de fragmentos de código vs.

Mohamed Allal
fuente