Starší komentáře ke článku: Regulární výrazy a JavaScript - úvod

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: jjmmeennoo

Datum vložení: 7.6.2005 12:46:34

Dobrý den, shodou okolností, v době kdy vyšel tento článek, řeším problém za pomoci regulárních výrazů v Javascriptu. Potřebuji jednoduše pomocí regulárních výrazů rozebrat větu tak, abych měl pole samostatných slov. Zkouším to takto, ale nejde to: myRe=/(\w+)/g; myArray = myRe.exec("ahoj jak se mas"); Čekal bych, že se mi vrátí pole jednotlivých slov. Nevíte náhodou jak na to? A nebo ještě lépe, aby se porovnal správný řetězec s uživatelovým. Např. spravna_veta = "Ahoj jak se mas"; uzivatelova_veta = "ahoj, jak se mas?"; potřebuji tolerovat velikost písmen, počet mezer mezi slovy a nealfanumerické znaky, tak aby se tyto dvě věty rovnaly. Předem děkuji za radu.

Avatar

Autor komentáře: Jakub Vrána

Datum vložení: 7.6.2005 14:26:29

K rozdělení řetězce do pole slouží metoda split() objektu String. Tedy například: myArray = uzivatelova_veta.split(/\W+/); Popsaný problém bych ale řešil jinak. Ze správné věty bych si postavil regulární výraz, proti kterému bych zkontroloval to, co zadal uživatel. Nějak takhle: re = new RegExp('^\\W*' + spravna_veta.replace(' ', '\\W+') + '\\W*$', 'i'); re.test(uzivatelova_veta); Samozřejmě to předpokládá, že v proměnné spravna_veta nebudou žádné speciální znaky (vyhodnotí se jako regulární výraz).

Avatar

Autor komentáře: jjmmeennoo

Datum vložení: 7.6.2005 14:41:28

split samozřejmě znám, ale před tímto parsováním by bylo potřeba vyřešit např. dvojité mezery, otazníky, atp. Váš regulární výraz funguje. Děkuji :) ... Mohl byste mi prosím vysvětlit co to vlastně dělá? ten replace moc nechápu ... a daly by se vyřešit ještě ty odchylky jako třeba více mezer po sobě, otazníky, čárky ve větě, atp? ... např. těch více mezer mezi slovy dělá tomuto RegExp problémy... děkuji

Avatar

Autor komentáře: Jakub Vrána

Datum vložení: 7.6.2005 15:16:38

Dvojité mezery, otazníky a všechno podobné smetí spláchne \W+ - to znamená alespoň jeden nepísmenný znak. "a b, c".split(/\W+/) == ['a', 'b', 'c']; // mezi a a b jsou dvě mezery, což tu ale není vidět replace(' ', '\\W+') nahradí každou mezeru regulárním výrazem pro libovolnou posloupnost nepísmenných znaků. Předpokládám, že proměnnou spravna_veta si vytváříte sám a vyrobíte ji už v "normalizovaném" tvaru. Pokud ne, dá se použít: spravna_veta.replace(/\W+/, '\\W+') Předpokládané odchylky v proměnné uzivatelova_veta ale řešil i předchozí výraz.

Avatar

Autor komentáře: Valerie Zawadská

Datum vložení: 8.6.2005 13:07:24

Dobrý den, vypadáte jako pravý guru. Je možné Vás nějak kontaktovat, např. přes ICQ? Děkuji Valerie Zawadská

Avatar

Autor komentáře: Jakub Vrána

Datum vložení: 10.6.2005 10:17:55

ICQ nepoužívám, ale e-mail naleznete na http://php.vrana.cz (nerad ho uvádím na cizí weby).

Avatar

Autor komentáře: Hooonza

Datum vložení: 9.2.2007 15:09:18

[abc] není skupina daná výčtem, povoluje právě jeden ze skupiny znaků (viz http://www.regularnivyrazy.info/regularni-vyrazy-zaklady.html, testováno pomocí http://www.regexp.cz/). Skupina daná výčtem obsahuje obyčejné závorky: [i](abc)[/i].

Avatar

Autor komentáře: Miroslav Pecka

Datum vložení: 9.2.2007 17:26:24

Skupinou znaků je míněna množina znaků, nikoliv jejich sekvence. Sekvence znaků (v daném pořadí) může být subvýrazem, potom bude uzavřena v kulatých závorkách. Vizte http://www.regularnivyrazy.info/regularni-vyrazy-zaklady.html "Pokud chceme v určitém místě povolit právě jeden ze skupiny znaků, uzavřeme takovou skupinu znaků do hranatých závorek ([ a ]). "

Zpět na článek | Úvodní stránka Interval.cz