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

157
Vistas
Reemplazar palabras excepto las que están entre llaves

Tengo una cadena de descuento como esta Status of app [TODO app](url.com/apps/list?appid=q1w2e3) has been changed to completed.
Quiero envolver las palabras buscadas (vea la función a continuación) con <mark></mark> , pero omita el enlace (url.com/apps/list?appid=q1w2e3) así tendré TODO <mark>app</mark> pero no url.com/<mark>app</mark>s/list?<mark>app</mark>id=q1w2e3

¿Cómo puedo lograr eso?

El código que estoy usando para agregar mark :

 const garbage = /[|\\{}()[\]^$+*?.]/g; const highlightMarkdown = (originalString = '', highlight = '') => { highlight = highlight.trim(); if (!highlight) return originalString; const wordsToFind = highlight.replace(garbage, '').split(' '); const result = wordsToFind.reduce((result, word) => { const re = new RegExp(`(${word})`, 'gi'); return result.replace(re, (word) => `<mark>${word}</mark>`); }, originalString); return result; }; const result = highlightMarkdown( `Status of app [TODO app](url.com/apps/list?appid=q1w2e3) has been changed to completed.`, 'app' ); console.log(result);

UPD Estoy tratando de mark no solo la app sino también <mark>app</mark>s , porque esta función es para la búsqueda del usuario

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede ser suficiente asegurarse de que la palabra no esté precedida o seguida de números alfanuméricos, ni de algunos caracteres específicos como / , & , = y - .

Además, puede hacer esto con una expresión regular y no necesita una devolución de llamada como argumento para la llamada de replace . Puede usar una referencia inversa $& :

 const garbage = /[|\\{}()[\]^$+*?.]/g; const highlightMarkdown = (originalString = '', highlight = '') => { highlight = highlight.trim().replace(garbage, ''); if (!highlight) return originalString; const wordsToFind = highlight.replace(/ /g, '|'); const re = new RegExp(`(?<![/=&-])\\b(${wordsToFind})\\b(?![/=&-])`, 'gi'); return originalString.replace(re, '<mark>$&</mark>'); }; const result = highlightMarkdown( `Status of app [TODO app](url.com/apps/list?appid=q1w2e3) has been changed to completed.`, 'app' ); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede eliminar la bandera g , pero solo cambiará la primera app coincida, no la que está dentro de los corchetes [TODO app] , para hacer ¡Así que puede definir una variable veces y definir cuántas veces desea que se reemplace la palabra app !

 const garbage = /[|\\{}()[\]^$+*?.]/g; const highlightMarkdown = (originalString = '', highlight = '') => { highlight = highlight.trim(); if (!highlight) return originalString; const wordsToFind = highlight.replace(garbage, '').split(' '); let times = 0; // Define here const result = wordsToFind.reduce((result, word) => { const re = new RegExp(`(${word})`, 'gi'); return result.replace(re, (word) => { if(times<2){ times++; // increment here return `<mark>${word}</mark>`; } return word; }); }, originalString); return result; }; const result = highlightMarkdown( `Status of app [TODO app](url.com/apps/list?appid=q1w2e3) has been changed to completed.`, 'app' ); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Mejor solución usar límite de palabra \b

 const re = new RegExp(`\\b(${word})\\b`, 'gi');
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