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, '');
kiran
quelle
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, '');
Kobi
quelle
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,'');
KooiInc
quelle
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, '');
Spudley
quelle
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).

qrikko
quelle
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

Emma
quelle
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.

Dan Bray
quelle
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('')
}
Captainozlem
quelle