Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript]text.match zwraca za dużo
Warmix
post 15.09.2016, 08:52:19
Post #1





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


Cytat
var str2 = document.getElementById("textarea").value;
str2 = str2.match(/test1(.*?)test2/g);

document.getElementById("p3").innerHTML = str2;


Czemu taki kod zwraca mi wartość:
Cytat
test1 tutaj jakis test test2


Chciałbym, aby zwracał:
Cytat
tutaj jakis test
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
kapslokk
post 15.09.2016, 08:57:28
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


[JAVASCRIPT] pobierz, plaintext
  1. var str2 = document.getElementById("textarea").value;
  2.  
  3. var regex = /test1(.*?)test2/g;
  4. str2 = regex.exec(str2)
  5.  
  6. document.getElementById("p3").innerHTML = str2[1];
[JAVASCRIPT] pobierz, plaintext


Ten post edytował kapslokk 15.09.2016, 08:58:02
Go to the top of the page
+Quote Post
nospor
post 15.09.2016, 09:01:19
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




match zwraca ci tablice z odpowiedziami, dokladnie tak jak preg_match w php. A ze ty potem bez namyslu te tablice rzutujesz na tekst to masz co masz smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kapslokk
post 15.09.2016, 09:06:54
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


@nospor - też tak myślałem, ale przy wywołaniu np:
[JAVASCRIPT] pobierz, plaintext
  1. var str = "test1 tutaj jakis test test2";
  2. var res = str.match(/test1(.*?)test2/g);
  3. console.log(res);
[JAVASCRIPT] pobierz, plaintext

W konsoli mam string biggrin.gif Dlatego wrzucilem rozwiązanie z .exec.
Pewnie jest tu jakiś śmieszny trik do zrobienia, ale na JS się nie znam biggrin.gif
Go to the top of the page
+Quote Post
nospor
post 15.09.2016, 09:11:57
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@kapslokk wg manuala to zwraca tablice wiec nawet nie sprawdzalem wink.gif
https://developer.mozilla.org/en/docs/Web/J...ts/String/match


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kapslokk
post 15.09.2016, 09:14:16
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Znaczy tak, zwraca tablice, ale z jednym elementem, ktorym jest caly string ktory pasuje do regexa w tym przypadku. Czyli tak jakby w przypadku preg_matcha nie bylo tego nawiasu w srodku. Taki preg_match_all bez nawiasow biggrin.gif

Ten post edytował kapslokk 15.09.2016, 09:14:39
Go to the top of the page
+Quote Post
nospor
post 15.09.2016, 09:15:34
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wg dokumentacji zwraca tablice z elementami.... Zmuszasz mnie do testow normanie wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Warmix
post 15.09.2016, 09:16:24
Post #8





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


@nospor bez problemu mogę wyłuskać wartość, gdy nie daję flagi /g. Wtedy [1] - daje mi ten tekst pomiędzy. Problem jest gdy nadam /g. Wtedy każda wartość podawana jest tylko w formie wraz z tymi test1 i test2. W jaki sposób mogę odwołać się w match() to tych elementów pomiędzy?

@kapslokk poniekąd działa, ale tylko dla jednego elementu, tak, jakby flaga /g nie była zastosowana sad.gif Według tego co piszą, powinno dać się odwołać po kolei [1], [2] do kolejnych znalezionych elementów, ale [0] odwołuje do wraz z test1 i test2, [1] do bez tego a [2] - undefinied sad.gif

Wzór:
Cytat
test1 tutaj jakis test test2
test1 drugi test2
test1 trzeci test2


I zwrócić powinno:
Cytat
tutaj jakis test
drugi
trzeci


Ten post edytował Warmix 15.09.2016, 09:24:45
Go to the top of the page
+Quote Post
nospor
post 15.09.2016, 09:18:03
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




O, z G zwraca jeden element. Wywalimi G i damy I mamy kilka elementow smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kapslokk
post 15.09.2016, 09:25:31
Post #10





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


@nospor - Teraz to i sam do tego doszedłem biggrin.gif

@Warmix
.exec wielokrotnie odpalany bedzie zwracal kolejne wyniki:

[JAVASCRIPT] pobierz, plaintext
  1. var str = "test1 111 test2 test1 tutaj jakis test test2 test1 tutaj jakis test test2";
  2. var regex = /test1(.*?)test2/g;
  3. var res;
  4. res = regex.exec(str)
  5. console.log(res)
  6. res = regex.exec(str)
  7. console.log(res)
  8. res = regex.exec(str)
  9. console.log(res)
  10. res = regex.exec(str)
  11. console.log(res)
[JAVASCRIPT] pobierz, plaintext


Mozesz odpalić go w pętli

Ten post edytował kapslokk 15.09.2016, 09:26:10
Go to the top of the page
+Quote Post
by_ikar
post 15.09.2016, 10:43:40
Post #11





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Regex w JS'ie działa tak, że kiedy nie masz ustawionej flagi g wtedy zwracany jest pierwszy napotkany wynik res[1], kiedy jest ustawiona flaga g wtedy zwracany jest cały wynik, nie tylko końcowa wartość. Działa to tak samo jak preg_match w php, jak już wyżej @nospor napisał.

Twój przypadek nie potrzebuje flagi g, chyba że w twoim przypadku wystąpień jest wiele, to wtedy i tak będziesz musiał iterować po tablicy.
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 - 15:35