Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] RegExp
Forum PHP.pl > Forum > Przedszkole
flashdev
Potrzebuję prosty kawałek kodu, a nie potrafie sobię poradzić.

Mam taki string:
"http://domena.pl/skrypt.php?zmienna={znaki_alfanumeryczne}[&opcjonalne_zmienne]"

Chciałbym wyrażeniem regularnym wyciągnąć zawartość: {znaki_alfanumeryczne}.

Kod
var str = "http://domena.pl/index.php?u=user";
var pattern = /http:\/\/domena.pl\/index\.php\?u=([a-z]|[0-9])+/;
var result = str.match(pattern);
alert(result);


Mam cos takiego, tylko problem w tym, że w wyniku działania skryptu chciałbym otrzymać: "user", zamiast: "http://domena.pl/index.php?u=user".

Edit:

Potrzebuję taki kod jaki jest tutaj: http://forum.php.pl/index.php?s=&showt...st&p=578715 tylko w JS.
kamil4u
Kod
<script>
var str = "http://domena.pl/index.php?u=user";
var pattern = /http:\/\/domena.pl\/index\.php\?u=([a-z]+|[0-9]+)/;
var result = str.match(pattern);
alert(result[1]);
</script>
flashdev
Ok, tyle to i ja wiem, że funkcja zwraca tablicę dwuelementową. Ale mogłeś się troszkę wysilić i napisać dlaczego tak sie dzieje, o ile wiesz oczywiście.
Ja szukam rozwiązania tego problemu, a nie sposobu na obejście tego, gdzie dla tego jednego przypadku akurat to się sprawdzi.
kamil4u
Cytat
Ok, tyle to i ja wiem, że funkcja zwraca tablicę dwuelementową

Polemizowałbym tongue.gif

Cytat
nie sposobu na obejście tego

Popatrz na różnice - to nie jest obejście smile.gif
Kod
<script>
var str1 = "http://domena.pl/index.php?u=blablbal";
var str2 = "http://domena.pl/index.php?u=1234";
var str3 = "http://domena.pl/index.php?u=bla123bla123";
var str4 = "http://domena.pl/index.php?u=user&test=ala-ma-kota";

var pattern = /http:\/\/domena.pl\/index\.php\?u=([a-z]+|[0-9]+)/;
var result = str1.match(pattern); //podstaw po kolei str[1-4]
alert(result[1]);
</script>


Popatrz na różnice w Twoim kodzie i moim - zorientujesz się czym się różnią smile.gif - podp. patrz na '+'
zegarek84
widzę, że linka dałeś do mojego postu więc ja dodam, że kamil4u akurat tutaj ma rację gdyż wyniki wyrażeń regularnych zawsze są w tablicy i pierwszy element tablicy to pasujący do wyrażenia całego ciąg znaków... (mało tego - tablice mogą być dużo bardziej zagniezdrzone - wszystko zależy od konstrukcji wyrażenia regularnego i tego które wyrażenia są zapamiętywane z całego...)

choć w drugą stronę to tym razem akurat obejście ale możesz skożystać w js z funkcji replace() i używając wyrażenia regularnego z ciągu zostawić tylko zmienną którą chcesz - ale raczej to bym nazwał obejściem problemu a nie rozwiązaniem ;p

no jesli z kolei nie podoba Ci się tylko to że zmienna jest w tablicy to wystarczy zapisać:

result=result[1]; // i już nie ma result[1] ^^

ps.

ale jako wyrażenie regularne to w tym nawiasie ja bym wolał urzyć ([^&]+) winksmiley.jpg
flashdev
W sumie to Twój kod nie wyłapuje jeszcze dokładnie wszystkich tych nazw zmiennych.
Dopiero poniższy kod działałby tak jak trzeba.
Problem w tym, że dalej zwraca tablicę/obiekt i to w tej chwili 3-elementową. Czyli ten wzorzec pasuje tam aż trzy razy.
A ja chciałbym mieć taki kod, który zwróciłby tylko i wyłącznie samą wartość zmiennej $u.
Przejrzałem wiele kursów regexp, ale w dalszym ciągu nie wiem jak oznaczyć ten ciąg, który ma zostać zwrócony.
Kod
<script>
var str1 = "http://domena.pl/index.php?u=blablbal";
var str2 = "http://domena.pl/index.php?u=1234";
var str3 = "http://domena.pl/index.php?u=bla123bla123";
var str4 = "http://domena.pl/index.php?u=user&test=ala-ma-kota";

var pattern = /http:\/\/domena.pl\/index\.php\?u=(([a-z]|[0-9])+)/;
var result = str4.match(pattern); //podstaw po kolei str[1-4]
alert(result);
</script>


Cytat(zegarek84 @ 22.05.2009, 17:23:13 ) *
no jesli z kolei nie podoba Ci się tylko to że zmienna jest w tablicy to wystarczy zapisać:

result=result[1]; // i już nie ma result[1] ^^


Nie o to mi chodzi, że mi sie nie podoba. Chodzi o to, że w tym przypadku to jeszcze tak działa i możnaby tak to obejść. Ale na przyszłość chciałbym wiedzieć dlaczego właśnie tak to działa. I jak zrobić to według mojej woli.
Jeśli będę chciał wyciągnąć wiecej niż jeden element z takiego stringa to już nie koniecznie w chwili pisania kodu będę musiał wiedzieć w których indeksach tablicy ukryły się elementy, których szukam.
kamil4u
Napisał Ci już ~zegarek84 co masz zrobić.... - nie da się tego inaczej zrobić(poprawnie):
Cytat
var pattern = /http:\/\/domena.pl\/index\.php\?u=([a-z0-9]+)/;
var result = str3.match(pattern)[1]; //podstaw po kolei str[1-4]
alert(result);


--edit--
Nie doczytałem do końca...
Nic na to nie poradzisz tak po prostu jest w JS... Zawsze sobie możesz wyalertować i wyszukać odp. ciąg - polecam: http://www.egrafik.pl/kurs-regex-wyrazenia-regularne/
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.