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

428
Vistas
Reemplazo de cadena entre dos índices dados en múltiples lugares de la cadena con JavaScript

Tengo una cadena y una matriz de índices de inicio y finalización en la cadena que deben reemplazarse con algún otro contenido. Por ejemplo, la cadena de entrada es la siguiente:

Mention 1, Mention 3 and no more mentions.

Y la matriz de índices a reemplazar es la siguiente:

 [ { start: 0, end: 8 }, { start: 11; end: 18 } ]

Básicamente, esto debería dar como resultado una cadena donde la Mention 1 y la Mention 3 están envueltas en un ancla (enlace).

He encontrado algunos ejemplos como este :

 String.prototype.replaceBetween = function(start, end, what) { return this.substring(0, start) + what + this.substring(end); }; console.log("The Hello World Code!".replaceBetween(4, 9, "Hi"));

Sin embargo, el problema con esta implementación es que es buena solo si hay 1 solo lugar para reemplazar, en mi caso puede haber varios lugares para reemplazar. Después del primer reemplazo, los índices para el resto se cambiarán ya que la cadena ahora también contendrá .

Cualquier pista/pista sería muy apreciada.

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

EDITAR: Hay 2 preguntas aquí, ya que su ejemplo realmente no cubre el envoltorio.

Usando índices, como mencionas, cada reemplazo cambia la posición de todos los elementos después del reemplazo. Sin embargo, los índices de caracteres anteriores permanecerían sin cambios. Simplemente necesitaría iterarlos a la inversa.

 var str = 'Mention 1, Mention 3 and no more mentions.' for (const { start, end } of positions.reverse()) { str = str.replaceBetween(start, end, 'REPLACEMENT') }

Sin embargo, esto realmente no aborda la preocupación del envoltorio. Si realmente debe usar índices de matriz, lo anterior podría cambiarse para aceptar una función, por ejemplo:

 String.prototype.replaceBetween = function (start, end, replacer) { const what = replacer(this.substring(start, end)); return this.substring(0, start) + what + this.substring(end); }; for (const { start, end } of positions.reverse()) { str = str.replaceBetween(start, end, (match) => `<a href="#">${match}</a>`); }

Sin embargo, si la matriz de índices es solo un artefacto de la búsqueda de un patrón en particular, una solución más limpia podría aprovechar String#replace con una expresión regular y una función de reemplazo.

 // the `/g` at the end means "global", so it will replace all matches const pattern = /Mention \d+/g; var str = 'Mention 1, Mention 3 and no more mentions.' str = str.replace(/Mention \d+/g, (match) => { return `<a href="#">${match}</a>`; });

Salida: '<a href="#">Mention 1</a>, <a href="#">Mention 3</a> and no more mentions.'

about 4 years ago · Santiago Gelvez Denunciar

0

Debe recorrer su matriz de posición. Como eso:

 const n = [ { start: 0, end: 8 }, { start: 11, end: 18 } ]; let str = 'Mention 1, Mention 3 and no more mentions.'; String.prototype.replaceBetween = function(start, end, what) { return this.substring(0, start) + what + this.substring(end); }; n.forEach(e => { console.log("The Hello World Code!".replaceBetween(e.start, e.end, "Hi")); })

about 4 years ago · Santiago Gelvez 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