Jak usunąć liczby z ciągu?

84

Chcę usunąć liczby z ciągu:

questionText = "1 ding ?"

Chcę zamienić 1liczbę i znak zapytania ?. Może to być dowolna liczba. Wypróbowałem następujący niedziałający kod.

questionText.replace(/[0-9]/g, '');
kiran
źródło
3
Co dokładnie nie działa? Ponieważ TO usuwa numer ...
Felix Kling
Czy będziesz musiał usunąć separatory dziesiętne?
robaczki świętojańskie
1
@Berbi To pytanie nie jest powtórzone. Cytowana metoda „Zastąp metodę nie działa” nie ma odpowiedniego tytułu, aby użytkownik mógł wpisać i wyszukać „Usuwanie liczb z ciągu znaków”. Zła umiar.
Gilberto Albino,

Odpowiedzi:

164

Bardzo blisko, spróbuj:

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

replacenie działa na istniejącym ciągu, zwraca nowy. Jeśli chcesz go używać, musisz go zachować!
Podobnie możesz użyć nowej zmiennej:

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

Ostatnia sztuczka polegająca na usuwaniu całych bloków cyfr na raz, ale ta może posunąć się za daleko:

questionText = questionText.replace(/\d+/g, '');
Kobi
źródło
czy mogę wymienić? & * z łańcucha w metodzie jednej zamiany, takiej jak str.replace ("?, *", "");
kiran
to nie działa, chcę wymienić oba? i * ze spacją w ciągu
kiran
@kiran - pamiętaj, aby na przykład przed nimi uciec \?,\*, ale prawdopodobnie chcesz /[?*]/g. Nie krępuj się zadać nowe pytanie, jeśli je masz!
Kobi
11

String są niezmienne , dlatego questionText.replace(/[0-9]/g, '');na jego własny ma pracy, ale to nie zmienia questionText string. Będziesz musiał przypisać wynik zamiany do innej zmiennej typu String lub ponownie do samego questionText.

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

lub za jednym razem (używając \d+, zobacz odpowiedź Kobi):

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

a jeśli chcesz przyciąć początkowe (i końcowe) spacje, gdy jesteś na tym:

 questionText = ("1 ding ?").replace(/\d+|^\s+|\s+$/g,'');
KooiInc
źródło
Nie zapomnij /go wszystkich wyrażeniach regularnych - JavaScript jest w ten sposób irytujący:)
Kobi
9

Jesteś niezwykle blisko.

Oto kod, który napisałeś w pytaniu:

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

Kod, który napisałeś, rzeczywiście patrzy na zmienną questionText i generuje wynik, który jest oryginalnym ciągiem, ale z cyframi zastąpionymi pustym ciągiem.

Jednak nie przypisuje go automatycznie z powrotem do oryginalnej zmiennej. Musisz określić, do czego chcesz go przypisać:

questionText = questionText.replace(/[0-9]/g, '');
Spudley
źródło
1

Chcę tylko dodać, ponieważ może to kogoś zainteresować, że możesz pomyśleć o problemie w inny sposób. Nie jestem pewien, czy to jest tutaj interesujące, ale uważam to za istotne.

Mówiąc inaczej, mam na myśli to, że „zdejmij wszystko, czego nie szukam, tj. Jeśli chcesz tylko„ ding ”, możesz powiedzieć:

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

Co zasadniczo oznacza „usuń wszystko, co jest nog a, b, c, d .... Z (dowolna litera).

qrikko
źródło
1

Drugą opcją byłoby dopasowanie i zwrócenie liczb niebędących cyframi za pomocą wyrażenia podobnego do,

/\D+/g

co prawdopodobnie zadziała dla tego konkretnego ciągu w question ( 1 ding ?).

Próbny

Test

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));


Jeśli chcesz uprościć / zmodyfikować / zbadać wyrażenie, zostało to wyjaśnione w prawym górnym panelu regex101.com . Jeśli chcesz, możesz również obejrzeć w tym linku , jak to będzie się zgadzać z niektórymi przykładowymi danymi wejściowymi.


RegEx Circuit

jex.im wizualizuje wyrażenia regularne:

wprowadź opis obrazu tutaj

Emma
źródło
0

Można to zrobić bez tego, regexco jest bardziej wydajne:

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);

Jako bonus przechowuje również numer, który może być przydatny dla niektórych osób.

Dan Bray
źródło
0

Możesz użyć metod .match && join (). .match () zwraca tablicę, a .join () tworzy łańcuch

function digitsBeGone(str){
  return str.match(/\D/g).join('')
}
captainozlem
źródło