Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> JS/Jquery: Jak wyciągnąć ciąg znaków z pomiędzy dwóch innych ciągów?, Wyrażenia regularne ;/
shimano
post 23.04.2010, 19:24:07
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 6.06.2009

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


Witam,

Pewnie niektórzy pomyślą sobie, że upierdliwy jestem i pokłóciłem się z Google. Otóż, może pierwsze, ale nie drugie. Póki co nie znalazłem odpowiedzi.

A pytanie, jak w temacie. W PHP korzystam z podpowiedzi, jakiej udzielił mi już ktoś wcześniej na tym forum, czyli #ciag1(.*?)ciag2#, przy czym jako zwrot mogę dostać to co w nawiasie lub TRUE i cały ciąg spomiędzy #. Teraz w JS/Jquery potrzebuję dokładnie tylko i wyłącznie tego co byłoby pomiędzy ciag1 i ciag2.

Póki co chyba najbliższe rozwiązaniu co wymyśliłem to:
Kod
var ciag = "abcdefghij";
alert(ciag.match("abc(.*?)hij");


Ale oczywiście mi nie działa;/ Tzn. działa, ale nie do końca, ponieważ zwraca:
Kod
abcdefghij,defg

A powinno tylko to, co jest po przecinku.

Czy może ktoś pomóc?

Ten post edytował shimano 23.04.2010, 19:44:00
Go to the top of the page
+Quote Post
kamil4u
post 23.04.2010, 19:59:53
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Najprościej:
Kod
<script type="text/javascript">
var ciag = "abcdefghij";
alert(ciag.match("abc(.*?)hij")[1]);
</script>


--------------------
Go to the top of the page
+Quote Post
shimano
post 23.04.2010, 20:15:05
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 6.06.2009

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


Genialne.

Tylko zastanawiam się na ile to jest poprawne składniowo? Można w JS tak dodawac [] po funkcji?

P.S.
Jeszcze tylko takie szybkie pytanie - Jak pobrać ilość znalezionych ciągów?


Ten post edytował shimano 23.04.2010, 20:22:13
Go to the top of the page
+Quote Post
kamil4u
post 23.04.2010, 20:21:45
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Chodzi o to, że w wyniku dostałeś tablicę składającą się z 2 elementów. Jak wiadomo numeracja odbywa się od 0(stąd jedynka), natomiast skoro zwraca Ci tablicę to możesz w każdej chwili pobrać jej 2 element poprzez dodanie [1];

To tak jak być zrobił tak:
Kod
function x(){ return [0,1]; } //zwraca tablicę
alert( x()[1] );//zwraca 2 element z tablicy, którą zwróciła funkcja x, czyli 1


--------------------
Go to the top of the page
+Quote Post
shimano
post 23.04.2010, 20:30:55
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 6.06.2009

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


Cytat(kamil4u @ 23.04.2010, 20:21:45 ) *
Chodzi o to, że w wyniku dostałeś tablicę składającą się z 2 elementów. Jak wiadomo numeracja odbywa się od 0(stąd jedynka), natomiast skoro zwraca Ci tablicę to możesz w każdej chwili pobrać jej 2 element poprzez dodanie [1];

To tak jak być zrobił tak:
Kod
function x(){ return [0,1]; } //zwraca tablicę
alert( x()[1] );//zwraca 2 element z tablicy, którą zwróciła funkcja x, czyli 1


Już rozumiem. Nigdy nie domyśliłbym się, że wynik mam w tablicy ;/


To w takim razie, pytanie - dlaczego nie działa mi to (te wyrażenie regularne) w postaci zwielokrotnionej?

Np.
Cytat
var ciag = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghij";
var znalezione = ciag.match("abc(.*?)hij");
alert(znalezione.length); // tutaj wyswietli tylko 2, zamiast 10;/ dlaczego?

Go to the top of the page
+Quote Post
kamil4u
post 23.04.2010, 20:32:30
Post #6





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Poczytaj o wyrażeniach regularnych - szczególnie o "fladze g" - polecam: http://www.egrafik.pl/kurs-regex-wyrazenia-regularne/


--------------------
Go to the top of the page
+Quote Post
shimano
post 23.04.2010, 20:38:38
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 6.06.2009

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


Cytat(kamil4u @ 23.04.2010, 20:32:30 ) *
Poczytaj o wyrażeniach regularnych - szczególnie o "fladze g" - polecam: http://www.egrafik.pl/kurs-regex-wyrazenia-regularne/


Znam stronę. Jednakże "abc(.*?)hij/g", ani "abc/g(.*?)hij/g" mi "nie łapie". Naprawdę, wiele razy brałem się za regexy i chyba tak jak pewne dziedziny matematyki - nigdy nie pojmę ;/

Update:
CHYBA znalazłem rozwiązanie. Moim błędem było zamieszczenie wyrażenia w cudzysłowiu. Po zlikwidowaniu go chyba działa poprawnie.

Kod
var znalezione = ciag.match(/abc(.*?)hij/g);



Ten post edytował shimano 23.04.2010, 21:05:07
Go to the top of the page
+Quote Post
kamil4u
post 23.04.2010, 21:21:41
Post #8





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Nie działa poprawnie, bo zwraca nie to co trzeba... - bardzo dawno się bawiłem w wyrażenia, dlatego pewnie to co jest poniżej da się zrobić lepiej, ale już mi się nie chce myśleć:
Kod
var ciag = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghij";
var test = ciag.match( /abc(.*?)hij/g );
var wynik = [];
for(var i=0; j=test[i++];){
wynik[wynik.length || 0] = j.match( /abc(.*?)hij/)[1];
}
alert(wynik);


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 20:40