Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

424
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!