Chcę usunąć liczby z ciągu:
questionText = "1 ding ?"
Chcę zamienić 1
liczbę i znak zapytania ?
. Może to być dowolna liczba. Wypróbowałem następujący niedziałający kod.
questionText.replace(/[0-9]/g, '');
Chcę usunąć liczby z ciągu:
questionText = "1 ding ?"
Chcę zamienić 1
liczbę i znak zapytania ?
. Może to być dowolna liczba. Wypróbowałem następujący niedziałający kod.
questionText.replace(/[0-9]/g, '');
Odpowiedzi:
Bardzo blisko, spróbuj:
questionText = questionText.replace(/[0-9]/g, '');
replace
nie 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, '');
\?,\*
, ale prawdopodobnie chcesz /[?*]/g
. Nie krępuj się zadać nowe pytanie, jeśli je masz!
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,'');
/g
o wszystkich wyrażeniach regularnych - JavaScript jest w ten sposób irytujący:)
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, '');
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).
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 ?
).
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.
jex.im wizualizuje wyrażenia regularne:
Można to zrobić bez tego, regex
co 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.
Możesz użyć metod .match && join (). .match () zwraca tablicę, a .join () tworzy łańcuch
function digitsBeGone(str){
return str.match(/\D/g).join('')
}