Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi
Fred1485
post
Post #2





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

Posty w temacie


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: 12.10.2025 - 05:42