5465 Stimmen

Ersetzen aller Vorkommen einer Zeichenkette in JavaScript

Ich habe diese Zeichenfolge in meinem JavaScript-Code:

"Test abc test test abc test test test abc test test abc"

Tun:

str = str.replace('abc', '');

Scheint nur das erste Vorkommen von abc in der obigen Zeichenfolge.

Wie kann ich die alle Vorkommnisse davon?

0voto

Force Bolt Punkte 863
// Try this way

const str = "Test abc test test abc test test test abc test test abc";
const result = str.split('abc').join('');
console.log(result);

0voto

pedro casas Punkte 127

Wiederholen Sie den Vorgang, bis Sie alle ersetzt haben.

const regex = /^>.*/im;
while (regex.test(cadena)) {
   cadena = cadena.replace(regex, '*');
}

0voto

Chungmin Park Punkte 21

Es gibt eine Möglichkeit, die neue replaceAll() Methode.

Sie müssen jedoch einen modernen Browser oder eine JavaScript-Laufzeitumgebung verwenden.

Sie können die Browserkompatibilität überprüfen unter aquí .

0voto

Alecx Punkte 69

Ich habe diese Frage und die Antworten gelesen, aber keine passende Lösung für mich gefunden. Obwohl dieser Thread sehr nützlich ist, habe ich beschlossen, meine eigene Lösung von Grund auf zu erstellen. Die Probleme über diese Art von Ersetzen sind:

  • Oft reicht es nicht aus, einfach eine Zeichenkette zu finden, die mit Groß-/Kleinschreibung übereinstimmt. Für Suchergebnisse muss ich z. B. Ersetzen Sie es durch das gleiche Gehäuse .
  • Wenn ich mich mit innerHTML beschäftige, kann ich leicht HTML-Tags beschädigen (z.B. ein Vorkommen von hr en href Attribut).
  • replaceAll()-Methode ist für viele Anwendungsfälle zu unausgereift, und sie löst nicht alle Probleme.

Ich habe also Funktionen geschrieben, um Suchergebnisse in einer Tabelle hervorzuheben, in deren Datenzellen sich Links und andere HTML-Tags befinden können. Und diese Links sollten beibehalten werden, also war innerText nicht genug.

Die Lösung, die ich beschlossen habe, für alle, die die gleichen Probleme haben, bereitzustellen. Sicherlich können Sie sie nicht nur für Tabellen, sondern für alle Elemente verwenden. Hier ist der Code:

/* Iterate over table data cells to insert a highlight tag */
function highlightSearchResults(textFilter) {
  textFilter = textFilter.toLowerCase().replace('<', '&lt;').replace('>', '&gt;');
  let tds;
  tb = document.getElementById('sometable'); //root element where to search
  if (tb) {
    tds = tb.getElementsByTagName("td"); //sub-elements where to make replacements
  }
  if (textFilter && tds) {
    for (td of tds) {
      //specify your span class or whatever you need before and after
      td.innerHTML = insertCaseInsensitive(td.innerHTML, textFilter, '<span class="highlight">', '</span>');
    }
  }
}

/* Insert a highlight tag */
function insertCaseInsensitive(srcStr, lowerCaseFilter, before, after) {
  let lowStr = srcStr.toLowerCase();
  let flen = lowerCaseFilter.length;
  let i = -1;
  while ((i = lowStr.indexOf(lowerCaseFilter, i + 1)) != -1) {
    if (insideTag(i, srcStr)) continue;
    srcStr = srcStr.slice(0, i) + before + srcStr.slice(i, i+flen) + after + srcStr.slice(i+flen);
    lowStr = srcStr.toLowerCase();
    i += before.length + after.length;
  }
  return srcStr;
}

/* Check if an ocurrence is inside any tag by index */
function insideTag(si, s) {
  let ahead = false;
  let back = false;
  for (let i = si; i < s.length; i++) {
    if (s[i] == "<") {
      break;
    }
    if (s[i] == ">") {
      ahead = true;
      break;
    }
  }
  for (let i = si; i >= 0; i--) {
    if (s[i] == ">") {
      break;
    }
    if (s[i] == "<") {
      back = true;
      break;
    }
  }
  return (ahead && back);
}

0voto

Die einfachste Lösung -

let str = "Test abc test test abc test test test abc test test abc";

str = str.split(" ");
str = str.filter((ele, key)=> ele!=="abc")
str = str.join(" ")

Oder einfach -

str = str.split(" ").filter((ele, key) => ele != "abc").join(" ")

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X