Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] RegExp Chciwość kwantyfikatorów.
Fred1485
post
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


Rozmyślam teraz nad prostym przykładem, wyczytałem z pewnej książki, myślałem, że błąd w składni jakiś mają, ale w praktyce wychodzi tak jak autor pisze, ale do rzeczy.

Rzecz ma się odnośnie kwantyfikatora chciwego vs niechętnego. Sama ich definicja jest w prosta, pokazuję na przykładzie:

  1. var str = 'abbbaabbbaaabbb1234';
  2. var re1 = /.?bbb/g;
  3. console.log(str.match(re1));
  4.  


Co do tego przykładu żadnego "ale" nie mam, działa tak jak oczekiwałem, tzn w tablicy są 3 wartości takie jak powinny być, ale:

  1.  
  2. var str = 'abbbaabbbaaabbb1234';
  3. var re2 = /.*bbb/g;
  4. console.log(str.match(re2));


W tym przykładzie kwantyfikator chciwy zaczyna od całego ciągu, odejmując po kolei 1,2,3,4 natrafia w końcu na dopasowanie i ładuje w tablicę, ale na tym sprawa się kończy, przecież odejmując kolejne znaki nie powinien "złapać" jeszcze "abbbaabbb" oraz "abbb"? Wygląda na to że dopasując pierwszy fragment kończy działanie?
Go to the top of the page
+Quote Post
Comandeer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Chciwy zawsze łapie najdłuższy, pasujący ciąg. W tym wypadku jest to wszystko po odcięciu liczbowej końcówki (wszak tuż przed nimi są trzy B ). A tego właśnie szuka: trzech b poprzedzonych czymkolwiek (i w tym czymkolwiek zawierają się także inne bbb)

Ten post edytował Comandeer 13.09.2015, 13:23:09
Go to the top of the page
+Quote Post
Fred1485
post
Post #3





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


Bezsprzecznie tak, masz całkowitą rację i to rozumiem, ale idąc tym tokiem rozumowania kwantyfikator niechętny zaczyna od pierwszego znaku i jak dojdzie do "abbb" to ładnie go znajduje, po czym przechodzi dalej i jeszcze znajduje dwa dopasowania (co jest logiczne), więc chodzi o to że niechętny zawsze zwróci tyle ile znajdzie począwszy od najkrótszego do najdłuższego, a chciwy tylko najdłuższy i kończy zabawę?

Ten post edytował Fred1485 13.09.2015, 13:29:33
Go to the top of the page
+Quote Post
Comandeer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Nie, ale będzie tak kombinował, żeby za każdym razem pobrać jak najwięcej. Jeśli da się wszystkie dopasowania złączyć w jedno, to to zrobi.
Go to the top of the page
+Quote Post
Fred1485
post
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


O taką odpowiedź chodziło (IMG:style_emoticons/default/biggrin.gif) dzięki wielkie!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 08:41