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, '');
javascript
regex
kiran
źródło
źródło
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, '');
źródło
\?,\*
, 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,'');
źródło
/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, '');
źródło
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).
źródło
Drugą opcją byłoby dopasowanie i zwrócenie liczb niebędących cyframi za pomocą wyrażenia podobnego do,
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:
źródło
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.
źródło
Możesz użyć metod .match && join (). .match () zwraca tablicę, a .join () tworzy łańcuch
function digitsBeGone(str){ return str.match(/\D/g).join('') }
źródło