Wie entferne ich Zahlen aus einer Zeichenfolge?


81

Ich möchte Zahlen aus einer Zeichenfolge entfernen:

questionText = "1 ding ?"

Ich möchte die 1Nummer und das Fragezeichen ersetzen ?. Es kann eine beliebige Zahl sein. Ich habe den folgenden nicht funktionierenden Code ausprobiert.

questionText.replace(/[0-9]/g, '');

3
Was genau funktioniert nicht? Weil es die Nummer entfernt ...
Felix Kling

Müssen Sie auch Dezimalstellen entfernen?
Glühwürmchen

1
@Berbi Diese Frage ist nicht doppelt. Die zitierte "Ersetzungsmethode funktioniert nicht" hat keinen richtigen Titel, so dass ein Benutzer eingeben und nach "Zahlen aus Zeichenfolge entfernen" suchen kann. Schlechte Mäßigung.
Gilberto Albino

Antworten:


160

Ganz in der Nähe, versuchen Sie:

questionText = questionText.replace(/[0-9]/g, '');

replacefunktioniert nicht mit der vorhandenen Zeichenfolge, sondern gibt eine neue zurück. Wenn Sie es verwenden möchten, müssen Sie es behalten!
Ebenso können Sie eine neue Variable verwenden:

var withNoDigits = questionText.replace(/[0-9]/g, '');

Ein letzter Trick, um ganze Ziffernblöcke auf einmal zu entfernen, aber dieser könnte zu weit gehen:

questionText = questionText.replace(/\d+/g, '');

kann ich ersetzen? & * von einem String in einem ersetzen Methode wie str.replace ("?, *", "");
Kiran

das funktioniert nicht, ich möchte beide ersetzen? und * mit Leerzeichen in meiner Zeichenfolge
kiran

@kiran - denk daran, ihnen zum Beispiel zu entkommen \?,\*, aber du willst es wahrscheinlich /[?*]/g. Fühlen Sie sich frei , eine neue Frage zu stellen, wenn Sie eine haben!
Kobi

11

Zeichenfolgen sind unveränderlich , deshalb funktioniertquestionText.replace(/[0-9]/g, ''); es alleine , aber es ändert nichts an der questionText-Zeichenfolge. Sie müssen das Ergebnis der Ersetzung einer anderen String-Variablen zuweisen oder den Text selbst erneut in Frage stellen.

var cleanedQuestionText = questionText.replace(/[0-9]/g, '');

oder auf einmal (mit \d+, siehe Kobis Antwort):

 questionText = ("1 ding ?").replace(/\d+/g,'');

und wenn Sie die führenden (und nachfolgenden) Leerzeichen kürzen möchten, während Sie gerade dabei sind:

 questionText = ("1 ding ?").replace(/\d+|^\s+|\s+$/g,'');

Vergessen Sie nicht /galle regulären Ausdrücke - JavaScript ist auf diese Weise ärgerlich:)
Kobi

9

Du bist bemerkenswert nah.

Hier ist der Code, den Sie in der Frage geschrieben haben:

questionText.replace(/[0-9]/g, '');

Der Code, den Sie geschrieben haben, betrachtet zwar die Variable questionText und erzeugt eine Ausgabe, die die ursprüngliche Zeichenfolge ist, wobei jedoch die Ziffern durch eine leere Zeichenfolge ersetzt werden.

Es wird jedoch nicht automatisch der ursprünglichen Variablen zugewiesen. Sie müssen angeben, wem Sie es zuweisen möchten:

questionText = questionText.replace(/[0-9]/g, '');

1

Ich möchte nur hinzufügen, dass es für jemanden von Interesse sein könnte, dass Sie das Problem auch andersherum betrachten. Ich bin mir nicht sicher, ob das hier von Interesse ist, aber ich finde es relevant.

Was ich mit dem anderen Weg meine, ist zu sagen: "Zieh alles aus, was nicht das ist, wonach ich suche, dh wenn du nur das" Ding "willst, könntest du sagen:

var strippedText = ("1 Ding?"). replace (/ [^ a-zA-Z] / g, '');

Was im Grunde bedeutet "entferne alles, was nicht a, b, c, d ... Z ist (irgendein Buchstabe).


1

Eine sekundäre Option wäre das Abgleichen und Zurückgeben von Nicht-Ziffern mit einem ähnlichen Ausdruck wie:

/\D+/g

was wahrscheinlich für diese bestimmte Zeichenfolge in der Frage ( 1 ding ?) funktionieren würde .

Demo

Prüfung

function non_digit_string(str) {
	const regex = /\D+/g;
	let m;

	non_digit_arr = [];
	while ((m = regex.exec(str)) !== null) {
		// This is necessary to avoid infinite loops with zero-width matches
		if (m.index === regex.lastIndex) {
			regex.lastIndex++;
		}


		m.forEach((match, groupIndex) => {
			if (match.trim() != '') {
				non_digit_arr.push(match.trim());
			}
		});
	}
	return non_digit_arr;
}

const str = `1 ding ? 124
12 ding ?
123 ding ? 123`;
console.log(non_digit_string(str));


Wenn Sie den Ausdruck vereinfachen / ändern / untersuchen möchten, wurde dies im oberen rechten Bereich von regex101.com erläutert . Wenn Sie möchten , können Sie in diesem Link auch sehen , wie es mit einigen Beispieleingaben übereinstimmt.


RegEx Circuit

jex.im visualisiert reguläre Ausdrücke:

Geben Sie hier die Bildbeschreibung ein


0

Dies kann ohne regexeffizienter erfolgen:

var questionText = "1 ding ?"
var index = 0;
var num = "";
do
{
    num += questionText[index];
} while (questionText[++index] >= "0" && questionText[index] <= "9");
questionText = questionText.substring(num.length);

Und als Bonus speichert es auch die Nummer, was für manche Leute nützlich sein kann.


0

Sie können die Methoden .match && join () verwenden. .match () gibt ein Array zurück und .join () erstellt einen String

function digitsBeGone(str){
  return str.match(/\D/g).join('')
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.