Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] RegExp Chciwość kwantyfikatorów.
Forum PHP.pl > Forum > Przedszkole
Fred1485
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?
Comandeer
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)
Fred1485
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ę?
Comandeer
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.
Fred1485
O taką odpowiedź chodziło biggrin.gif dzięki wielkie!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.