Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

148
Vistas
¿Reemplazar texto pero no si contiene caracteres específicos?

En JavaScript, estoy usando el siguiente código para reemplazar el texto que coincide con una determinada cadena. El reemplazo envuelve la cadena así: "A(hello)" . Funciona muy bien, pero si hay dos cadenas que son iguales, por ejemplo: "Hello hi Hello" , solo se marcará la primera y, si intento dos veces, se marcará doble, así: "A(A(Hello)) Hi Hello" .

Una solución a esto podría ser no reemplazar una palabra si contiene "A(" o está entre "A(" y ")" ; ambos funcionarían.

¿Alguna idea de cómo se puede lograr?

Nota: no puedo usar replaceAll porque si ya hay una palabra que se reemplaza y se agrega una nueva, se sobrescribirá la primera. Por lo tanto, necesito una solución como la anterior. Por ejemplo, si tengo una cadena que dice "Hola hola" y marco Hola, dirá "A (Hola) hola", pero si luego agrego Hola nuevamente al texto y lo reemplazo, se verá así: A(A(Hello)) hi A(Hello) .

Esto es lo que tengo hasta ahora:

 let text = "Hello hi Hello!" let selection = "Hello" let A = `A(${selection})` let addWoman = text.replace(selection, A)
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede usar una aserción de anticipación negativa en su patrón que falla la coincidencia si A( antes de la palabra completa Hello :

 (?<!A\()\bHello\b

Y reemplácelo con A($&)

Demostración RegEx

Código:

 let text = "Hello hi Hello!"; let selection = "Hello"; let A = `A(${selection})`; let re = new RegExp(`(?<!A\\()\\b${selection}\\b`, "g"); let addWoman = text.replace(re, A); console.log(addWoman); console.log(addWoman.replace(re, A));

about 4 years ago · Juan Pablo Isaza Denunciar

0

Una solución a esto podría ser no reemplazar una palabra si contiene "A(" o está entre "A(" y ")"; ambos funcionarían.

Para evitar volver a hacer coincidir la selection dentro de una cadena A(...) , puede hacer coincidir A(...) y capturarlo en un grupo para saber si el grupo coincidió, debe conservarse, de lo contrario, haga coincidir la palabra de tu preferencia:

 let text = "Hello hi Hello!" let selection = "Hello" let A = `A(${selection})` const rx = new RegExp(String.raw`(A\([^()]*\))|${selection.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')}`, 'g') let addWoman = text.replace(rx, (x,y) => y || A) console.log(addWoman); // Replacing the second time does not modify the string: console.log(addWoman.replace(rx, (x,y) => y || A))

La expresión regular se verá como /(A\([^()]*\))|Hello/g , coincide

  • (A\([^()]*\)) - Grupo 1: A y luego ( seguido de cero o más caracteres que no sean ( y ) y luego a ) char
  • | - o
  • Hello - una cadena Hello .
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda