• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zadanie do szkoły-prompt

Object Storage Arubacloud
+1 głos
389 wizyt
pytanie zadane 28 listopada 2017 w JavaScript przez shizeerr Początkujący (260 p.)
Siemka, mam do zrobienia niby proste zadanie, ale nie mogę wpaść na pomysł jak to zrobić.
Nie chce gotowca tylko, żeby ktoś mnie naprowadził (czego użyć)

Za pomocą prompta muszę wpisać tekst z liczbami, np. "Ala 32 ma 04 kota 12"
pobrać ten tekst, a następnie ma mi wypisać Ala ma kota (bez liczb) oraz 32 04 12 (bez słów)

Dzięki za pomoc

3 odpowiedzi

+1 głos
odpowiedź 28 listopada 2017 przez Tomek Sochacki Ekspert (227,510 p.)

String.prototype.replace plus wyrażenie regularne. Jeśli to początek nauki to łatwiej będzie Ci chyba użyć dwóch oddzielnych wyrażeń:

  1. pierwsze do znalezienia znaków [a-z] + ewentualnie "polskie ogonki" i ich zamiana na pusty ciąg znakowy,
  2. drugie do znalezienia cyfr [0-9] lub \d i ich zamiana na "".

Pamiętaj o dwóch kwestiach: włączenie flagi global aby wyrażenie regularne szukało wszystkich znaków i włączenie flagi case insensitive aby uwzględnić zarówno wielkie jak i małe litery (ewentualnie możesz zawrzeć je w samym wzorcu).

No i jeszcze jedno, pamiętaj, że jeśli z ciągu "a 2 a" usuniesz cyfrę 2, to znaczy zamienisz ją na: "", to w wynikowym ciągu będziesz miał "a  a" - dwie spacje między literami "a". Jeśli to ma znaczenie (a widząc z tego co masz uzyskać docelowo to ma) to przeleć jeszcze trzecim regexp i zamień wielokrotne spacje (/ +/g lub /\x20+/g) na pojedyncze.

komentarz 28 listopada 2017 przez shizeerr Początkujący (260 p.)
Załapałem o co chodzi, ale mam problem z wyrażeniem regularnym. Wydaje mi się, że jest złe, bo jeśli w prompt wpisze "Ala ma 32 koty" a w replace umieszcze ("32", "") to wypisze mi dobrze, czyli "Ala ma koty". Ale gdy wstawię tam zmienną z wyrażeniem regularnym to wypisuje mi wszystko

var pobierz = prompt("Wpisz tekst");
      var wreg1 = new RegExp("/^[0-9]$/", "g");
      var zamiana = pobierz.replace(wreg1, " ");
                        document.write (zamiana);
komentarz 28 listopada 2017 przez Tomek Sochacki Ekspert (227,510 p.)
function onlyLetters( str ) {
    if( str ) {
        return str.replace( /\d/g, "" ).replace( /\x20+/g, " ");
    }
    return "";
}
 onlyLetters( 'Ala ma 32 koty' ); //"Ala ma koty"

To jest przykład jak pozbyć się cyfr. Przeanalizuj i zrób sobie funkcję do Twojego zadania.

Generalnie w Twoim kodzie jest parę błędów. Po pierwsze lepiej stosuj metodę literalną definiowania regexp, a nie konstruktor RegExp. Nie jest to błąd, ale używając konstruktora trzeba pamiętać np. o konieczności stosowania podwójnych ukośników itp. A jeśli już tworzysz wzorzec z konstruktorem to nie używaj "/" na początku, wprowadzaj regexp jako string.

Twój wzorzec jest zły. Aby dokładnie zobaczyć co zrobiłeś musiałbyś wywołać np. toString albo analizować source, ale olej to, nie jest to miejsce i czas do analizy tego, co w rzeczywistości stworzyłeś.

Po drugie metodą replace zamieniasz dopasowanie (cyfrę) na spację, a nie o to chodzi. Masz cyfry usunąć, więc zamień je na pusty ciąg "". I na koniec usuń podwójne spacje, to znaczy zamień je na pojedyncze.

komentarz 28 listopada 2017 przez Tomek Sochacki Ekspert (227,510 p.)
I jeszcze jedno... zauważ mojego IFa... jeśli funkcja prompt zwraca ciąg znakowy jaki został wprowadzony albo NULL jeśli nic nie wpiszesz! Jest to bardzo ważne, ponieważ nie istnieje coś takiego jak null.prototype.replace... więc dostałbyś błąd.

Zrób więc weryfikację istnienia ciągu od prompta, a jeśli jest null to np. zwróć pusty ciąg znakowy (wg mnie takie podejście ma logiczny sens w tym zadaniu).
+1 głos
odpowiedź 28 listopada 2017 przez ScriptyChris Mędrzec (190,190 p.)

Koledzy zaproponowali użycie wyrażeń regularnych. Jest to dobry sposób.

Jako alternatywę i - prawdopodobnie - prostsze rozwiązanie do przyswojenia podam dwa przykłady w oparciu o pętle. Zakładam, że wyrazy i liczy są zawsze od siebie oddzielone spacją.

Dzielisz string za pomocą metody split, gdzie jako parametr podajesz spację (czyli " "). Otrzymujesz tablicę z wyrazami i liczbami.

Dalej można zastosować co najmniej dwie drogi:

1.

Zrobić dwie tablice i zastosować tyle samo razy metodę filter, gdzie rozdzielisz liczby od wyrazów na wspomniane tablice. Po czym połączyć ich elementy w stringi metodą join i zkonkatenować całość.

2.

Obrobić to w jednej pętli - zwykłym for. Ponownie utworzyć dwie zmienne, lecz tym razem typu string (czyli np. var str = '';). W pętli iterującej po tablicy podzielonych fragmentów wstawić warunek sprawdzający, czy fragment jest liczbą, czy nie, np. rzutując z użyciem funkcji Number. Liczby umieszczać w jednej zmiennej lub drugiej, od razu konkatenując wynik dodając spację na początku. Poza pętlą połączyć obie zmienne

Rozwiązania są o tyle prostsze w nauce, że nie wymagają od Ciebie znajomości wyrażeń regularnych. Na upartego dało by radę zapisać całość łańcuszkowo.

0 głosów
odpowiedź 28 listopada 2017 przez lapacz.kornel Mądrala (6,930 p.)

String.prototype.replace(). To się chyba może przydać

Podobne pytania

0 głosów
0 odpowiedzi 507 wizyt
pytanie zadane 15 kwietnia 2020 w JavaScript przez fiona1403 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 292 wizyt
pytanie zadane 17 grudnia 2019 w JavaScript przez Mloody Nowicjusz (150 p.)
0 głosów
1 odpowiedź 227 wizyt
pytanie zadane 28 lutego 2018 w JavaScript przez Secrus Nałogowiec (32,880 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...