preg_match()

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
panosru
WebDev Moderator
Δημοσιεύσεις: 1885
Εγγραφή: 13 Σεπ 2005 16:13
Τοποθεσία: Camp

preg_match()

Δημοσίευση από panosru » 23 Απρ 2006 15:32

Yparxei kati antisthxo gia to preg_match() sthn JavaScript opos sthn PHP?

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

preg_match()

Δημοσίευση από skeftomilos » 24 Απρ 2006 02:24

Κώδικας: Επιλογή όλων

<?php
  if &#40;preg_match&#40;"/php/i", "PHP is the web scripting language of choice"&#41;&#41; &#123;
    echo "A match was found";
  &#125; else &#123;
    echo "A match was not found";
  &#125;
?>

Κώδικας: Επιλογή όλων

<script type="text/javascript">
  if &#40;'PHP is the web scripting language of choice'.match&#40;/php/i&#41;&#41; &#123;
    document.write&#40;'A match was found'&#41;
  &#125; else &#123;
    document.write&#40;'A match was not found'&#41;
  &#125;
</script>
Εκτός από την string.match() υπάρχει και η αντίστροφη regularexpression.exec(), π.χ.:

Κώδικας: Επιλογή όλων

if &#40;/php/i.exec&#40;'PHP is the web scripting language of choice'&#41;&#41; &#123;...
Γενικά οι δύο τρόποι είναι ισοδύναμοι, εκτός από την περίπτωση global match που έχουν μία σημαντική διαφορά. Στην περίπτωση exec()+global πρέπει να καλέσουμε πολλές φορές την exec για να βρούμε όλα τα matches. Στην περίπτωση match() αρκεί μία κλήση για να πάρουμε όλα τα matches σε ένα array. Προσωπικά προτιμώ την match() για αρκετούς λόγους, ένας από τους οποίους είναι ότι η exec()+global δε λειτουργεί στον IE5.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

panosru
WebDev Moderator
Δημοσιεύσεις: 1885
Εγγραφή: 13 Σεπ 2005 16:13
Τοποθεσία: Camp

preg_match()

Δημοσίευση από panosru » 24 Απρ 2006 04:05

Thanks skeftomile kai go thn match() xrhshmopoio alla px me thn preg_match() ths php mporeis na exeis kai ena array (en' olighs san na kanei match() kai split() mazi) apla h aporia mou htan an eixe kati analogh h JavaScript gia na mhn kaneis meta split() na sto ekane aytmata diladi..

PS: to forum paei mia ora piso :P

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

preg_match()

Δημοσίευση από skeftomilos » 24 Απρ 2006 04:51

Μήπως εννοείς subexpressions; Αν θέλεις δώσε ένα παράδειγμα με το input και το ζητούμενο output.

Υπάρχουν λίγες ασυμβατότητες στις Regular Expressions από browser σε browser (και version σε version).
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

panosru
WebDev Moderator
Δημοσιεύσεις: 1885
Εγγραφή: 13 Σεπ 2005 16:13
Τοποθεσία: Camp

preg_match()

Δημοσίευση από panosru » 24 Απρ 2006 12:44

nai enoo ayto:

Κώδικας: Επιλογή όλων

$var = "foo=bar";
$pattern = "/&#40;^&#91;a-z0-9_&#93;*&#41;=&#40;&#91;a-z0-9_&#93;*&#41;/i";
preg_match&#40;$pattern,$var,$match&#41;;
print_r&#40;$match&#41;;
//Paragei&#58; Array &#40; &#91;0&#93; => foo=bar &#91;1&#93; => foo &#91;2&#93; => bar &#41; 
an mporo na kano kati antistoixo me thn JavaScript xoris omos na xrhshmopoihso custom function match() kai epita split()

panosru
WebDev Moderator
Δημοσιεύσεις: 1885
Εγγραφή: 13 Σεπ 2005 16:13
Τοποθεσία: Camp

preg_match()

Δημοσίευση από panosru » 24 Απρ 2006 12:47

akyro....
tora pou egrapsa ayto...

Κώδικας: Επιλογή όλων

<script type="text/javascript">
<!--
var foobar = 'foo=bar';
var pattern = new RegExp&#40;/&#40;^&#91;a-z0-9_&#93;*&#41;=&#40;&#91;a-z0-9_&#93;*&#41;/i&#41;;
foobar = foobar.match&#40;pattern&#41;;
document.write&#40;foobar&#41;;
//-->
</script>
katalaba oti to match() kanei thn idia douleia :/

:lol:

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

preg_match()

Δημοσίευση από skeftomilos » 24 Απρ 2006 16:23

Υπάρχει το \w που ισοδυναμεί με [a-zA-Z0-9_]

Κώδικας: Επιλογή όλων

var match = 'foo=bar'.match&#40;/^&#40;\w*&#41;=&#40;\w*&#41;$/&#41;
if &#40;match&#41; &#123;
  alert&#40;'Name = ' + match&#91;1&#93; + '\nValue = ' + match&#91;2&#93;&#41;
&#125;
Δηλαδή η match επιστρέφει πάντα array (ή undefined αν δε βρεθεί κάποιο ταίριασμα). Εναλλακτικά μπορεί να γίνει χρήση των στατικών ιδιοτήτων $0, $1, $2, $3 κ.λπ. της RegExp:

Κώδικας: Επιλογή όλων

if &#40;'foo=bar'.match&#40;/^&#40;\w*&#41;=&#40;\w*&#41;$/&#41;&#41; &#123;
  alert&#40;'Name = ' + RegExp.$1 + '\nValue = ' + RegExp.$2&#41;
&#125;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες