marți, 13 ianuarie 2009

Javascript & RegExp

Hei, ultimul post inainte de sfarsitul proiectului. Ca tot am predat tema 3 la IOM acum 2 saptamani, voi vorbi putin despre ce am folosit eu pentru a cauta expresiile dorite in paginile html: RegExp. RegExp vine de la RegularExpression si are niste chestii in comun cu tema pe care am facut-o la LFA anul trecut (care va mai aduceti aminte). RegExp este practic un obiect folosit pentru a memora un tipar (pattern) care va fi folosit in parsarea unui string. Poate lua forme simple sau mai complicate. Crearea unui nou obiect RegExp se face astfel in Javascript:

var txt=new RegExp(pattern,attributes);
or
var txt=/pattern/attributes;
Exemplu: var patt1=new RegExp("e", "g"); patt1 o sa fie egal cu stringul "e", iar cautarea se va face global, adica
se vor returna toate pozitiile gasite, nu doar prima(default).
Alte valori posibile pentru argumentul "attributes" sunt: "i" - case insensitive search, "gi" - global case insensitive si "m" - multiline search. Cand v-am spus ca regexp seamana cu tema de la LFA, m-am referit la urmatorul aspect: se pot adauga stringului din tipar diversi modificatori pentru parsari mai avansate. De exemplu modificatorul "[xyz]" folosit pentru a cauta caracterele din interiorul setului(cum faceam si la LFA, cu acele pattern-uri folosite la parsare). O lista completa de modificatori se gaseste pe pagina celor de la w3schools. Ca orice obiect care se respecta, regexp are si metodele sale:

compile() - schimba expresia folosita: 

var patt1=new RegExp("e", "g"); // patt1="e"
patt1.compile("f");// patt1="f"

exec() - intoarce string-ul gasit(daca exista) si tine minte pozitia:

patt1.exec(str); // cauta patt1 in stringul str

test() - returneaza true daca gaseste o cel putin o potrivire sau false daca nu:

flag=patt1.test("abcde"); // flag=false pentru patt1="e" dar flag=true pt patt1="f"

Anumite metode ale obiectelor de tip String accepta folosirea regexp ca argument: search(), match(), split(), replace(). Eu am folosit metoda search() in tema, si am construit urmatorul tipar pentru a descoperi doar cuvinte intregi, nu si substringuri:

 var patt1 = new RegExp("\\b" + str + "(?![a-z,A-Z,0-9])","i")

care inseamna, practic, ca voi cauta doar la inceputul cuvantului ("\\b"), si nici nu se vor accepta rezultatele care au in coada caractere numerice sau litere(adica se accepta decat cuvinte intregi, nu substringuri ale altor cuvinte ca rezultate).
Seamana putin cu tema de la LFA nu? :) Eu am ales RegExp pentru ca imi era mult mai usor sa caut cuvinte intregi astfel, decat cu search-ul normal al obiectului String.
Sa parsati sanatosi!



2 comentarii:

Paunica spunea...

M-ai pierdut la titlu :))

radiowhisper.com spunea...

Buna Ziua!
Eu sunt Vlad, unul dintre membri Radio Whisper - un radio antimanele dedicat bloggerilor şi nu numai.
Am găsit întâmplător blogul tău, am citit câteva articole şi nu am vrut să ies înainte să te felicit – mi-a plăcut mult ce am găsit aici. Am fost atras de subiectele interesante si de originalitatea articolelor. Felicitari ! Noi promovăm la radio diferite articole ale bloggerilor, iar azi am promovat un articol de-al tău; am specificat sursa articolului şi am deschis şi un subiect pe baza acestuia. Dacă doresti, poţi să ne recomanzi orice articol, iar noi îl vom promova.
Ne-ar face plăcere să ştim că ai dori să ne susţii în acest proiect de radio şi să accepţi o eventuală colaborare.
M-am gândit aşadar să vin cu o propunere:
Pe Radio Whisper se difuzează toate genurile de muzică, exceptând manele şi piese necenzurate. Avem şi câteva emisiuni, ştiri etc. Ne-am propus să realizăm un proiect mare, iar pentru asta avem nevoie de susţinerea şi ajutorul tău şi al celorlalţi colegi bloggeri. Dorim să creăm o echipă cât mai complexă de oameni cu un talent aparte şi m-am gândit că poate ai vrea sa ni te alături şi să colaborăm (binenţeles, pe unul dintre domeniile care îţi place). Dorim de asemenea să îţi acordăm un scurt interviu. Pentru noi sunt importante ideile şi modul de a gândi al bloggerilor şi al ascultatorilor noştri.
Îti multumesc pentru timpul acordat, iar acum îti propun sa adaugi linkul sau bannerul nostru pe blogul tău şi să ne dai add la id-ul asculta.whisper sau un e-mail, tot la asculta.whisper@yahoo.com, pentru a discuta mai multe.

www.radiowhisper.com
Multumesc,
Cu stimă Vlad!