Javascript – Bindestrich (Bindestrich) durch ein Leerzeichen ersetzen

Lesezeit: 4 Minuten

Ich habe eine Weile danach gesucht, und obwohl ich viele Antworten gefunden habe, um ein Leerzeichen in einen Bindestrich (Bindestrich) umzuwandeln, habe ich keine gefunden, die in die andere Richtung gehen.

Anfangs habe ich:

var str = "This-is-a-news-item-";

Ich versuche es zu ersetzen durch:

str.replace("-", ' ');

Und einfach das Ergebnis anzeigen:

alert(str);

Im Moment tut es nichts, also weiß ich nicht, wohin ich mich wenden soll. Ich habe versucht, einige der vorhandenen umzukehren, die das Leerzeichen durch den Bindestrich ersetzen, und das funktioniert auch nicht.

Danke für die Hilfe.

  • String ist nicht änderbar, Sie müssen das Ergebnis neu zuweisen.

    – FabienSa

    10. Januar 2013 um 16:39 Uhr

Benutzer-Avatar
Martijn

Das behebt es:

let str = "This-is-a-news-item-";
str = str.replace(/-/g, ' ');
alert(str);

Es gab zwei Probleme mit Ihrem Code:

  1. Zuerst, String.replace() ändert nicht die Zeichenfolge selbst, es kehrt zurück eine veränderte Saite.
  2. Zweitens, wenn Sie eine Zeichenfolge an die Ersetzungsfunktion übergeben, ersetzt sie nur die erste Instanz, auf die sie stößt. Deshalb habe ich a bestanden regulären Ausdruck mit dem g flag, für ‘global’, damit alle Instanzen ersetzt werden.

  • Bingo, das war es! Vielen Dank!

    – CMIVXX

    10. Januar 2013 um 16:54 Uhr

Benutzer-Avatar
grün

replace() gibt eine neue Zeichenfolge zurück, und die ursprüngliche Zeichenfolge wird nicht geändert. Sie müssen tun

str = str.replace(/-/g, ' ');

  • Das schien auch nicht zu funktionieren, warum auch immer… Siehe Fiddle-Link

    – CMIVXX

    10. Januar 2013 um 16:50 Uhr


  • Wie in anderen Antworten erwähnt, funktioniert dies nur für die erste Instanz. Du solltest benutzen str = str.replace(/-/g, ' '); um alle Instanzen des Bindestrichs zu ersetzen.

    – grün

    10. Januar 2013 um 16:53 Uhr

Benutzer-Avatar
Rohit Jain

Ich denke, das Problem, mit dem Sie konfrontiert sind, ist fast das: –

str = str.replace("-", ' ');

Sie müssen das Ergebnis der Ersetzung neu zuweisen strum die reflektierte Änderung anzuzeigen.

Aus MSDN-Javascript-Referenz: –

Das Ergebnis der replace-Methode ist eine Kopie von stringObj, nachdem die angegebenen Ersetzungen vorgenommen wurden.

Um alle zu ersetzen -müssten Sie verwenden /g Modifikator mit einem Regex-Parameter: –

str = str.replace(/-/g, ' ');

  • Dadurch wird nur die erste Instanz ersetzt … Sie müssen einen “globalen” regulären Ausdruck verwenden, um alle Instanzen zu ändern.

    – Martijn

    10. Januar 2013 um 16:45 Uhr

  • @Martijn .. Ja, ich habe auf das Hauptproblem hingewiesen. OP hätte das Ding auch herausgefunden, nachdem es zum Laufen gebracht worden wäre. Trotzdem habe ich zu Ihrer Zufriedenheit die direkte Antwort gepostet.

    – Rohit Jain

    10. Januar 2013 um 16:48 Uhr

  • Entschuldigung, aber jetzt funktioniert es überhaupt nicht: Sie übergeben immer noch eine Zeichenfolge, nur eine, die die enthält Muster für ein regulärer Ausdruck. Lassen Sie die doppelten Anführungszeichen weg und Sie sind gut.

    – Martijn

    10. Januar 2013 um 16:49 Uhr


  • @Martijn.. Meine Güte.. Danke 🙂

    – Rohit Jain

    10. Januar 2013 um 16:50 Uhr

  • Gut! Meine entfernt -1. 🙂

    – Martijn

    10. Januar 2013 um 16:55 Uhr

var str = "This-is-a-news-item-";
while (str.contains("-")) {
  str = str.replace("-", ' ');
}
alert(str);

Ich habe festgestellt, dass eine Verwendung von str.replace() nur den ersten Bindestrich ersetzen würde, also habe ich eine Schleife durchlaufen, während die Eingabezeichenfolge noch Bindestriche enthielt, und sie alle ersetzt.

http://jsfiddle.net/LGCYF/

Zusätzlich zu den bereits gegebenen Antworten möchten Sie wahrscheinlich alle Vorkommen ersetzen. Dazu benötigen Sie einen regulären Ausdruck wie folgt:

str = str.replace(/-/g, ' ');  // Replace all '-'  with ' '

Benutzer-Avatar
Penny Liu

Verwenden replaceAll() in Kombination mit trim() kann Ihre Bedürfnisse erfüllen.

const str="-This-is-a-news-item-";
console.log(str.replaceAll('-', ' ').trim());

Benutzer-Avatar
Ryan Mann

Stellen Sie sich vor, Sie erhalten doppelte Bindestriche und möchten diese durch ein einzelnes Zeichen ersetzen und nicht durch Doppelte des Ersetzungszeichens. Sie können einfach Array-Split und Array-Filter und Array-Join verwenden.

var str = "This-is---a--news-----item----";

Um dann alle Bindestriche durch einzelne Leerzeichen zu ersetzen, könnten Sie Folgendes tun:

var newStr = str.split('-').filter(function(item) {
  item = item ? item.replace(/-/g, ''): item
  return item;
}).join(' ');

Wenn die Zeichenfolge nun doppelte Bindestriche enthält, wie z. B. ‘—-‘, dann erzeugt die Array-Aufteilung ein Element mit 3 Bindestrichen darin (weil es beim ersten Bindestrich geteilt wird). Also mit dieser Zeile:

item = item ? item.replace(/-/g, ''): item

Die Filtermethode entfernt diese zusätzlichen Bindestriche, sodass das Element bei der Filteriteration ignoriert wird. Die obige Zeile berücksichtigt auch, ob item bereits ein leeres Element ist, damit es bei item.replace nicht abstürzt.

Wenn Ihr String-Join dann auf den gefilterten Elementen ausgeführt wird, erhalten Sie diese Ausgabe:

"This is a news item"

Wenn Sie jetzt so etwas wie knockout.js verwenden, wo Sie Computerobservables haben können. Sie könnten eine berechnete Observable erstellen, um „newStr“ immer zu berechnen, wenn sich „str“ ändert, sodass Sie immer eine Version der Zeichenfolge ohne Bindestriche haben, selbst wenn Sie den Wert der ursprünglichen Eingabezeichenfolge ändern. Grundsätzlich sind sie miteinander verbunden. Ich bin sicher, dass andere JS-Frameworks ähnliche Dinge tun können.

1073130cookie-checkJavascript – Bindestrich (Bindestrich) durch ein Leerzeichen ersetzen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy