Autor Zpráva
Václav Netolický
Profil *
Dobrý den vespolek,

pročetl jsem si články o reg. výrazech http://www.regularnivyrazy.info/serial-javascript-regexp.html a měl bych několik dotazů:


1) Prvně nechápu proč používat objektový zápis new RegExp(pattern, modifiers), umí něco navíc nebo má nějaké výhody oproti String zápisu /pattern/modifiers

2) Jaký rozdíl je mezi funkcemi search a test (krom toho, že search vrací nalezenou pozici a test return / false a bude asi rychlejší. // dalším rozdílem je stejné chování jako v 3)

3) rozdíl match a exec - přijde mi, že se chovájí stejně s tím rozdílem, že pokud bude hledaných výsledků víc tak musím při použití exec použít cyklus. (jedinou výhodou stejně jako test že umí zjištovat i index přes lastIndex)


4) http://pavucina.webmark.cz/23/regularni-vyrazy-a-javascript-4-metody-test-a-exec níže je napsáno
Výsledku, který nám v PHP zajistí funkce preg_match_all(), můžeme v JavaScriptu dosáhnout použitím RegExp metody exec() v cyklu (viz příklad výše).

To dle mého zajistí i funkce match s modifikátorem g , je to tak? Proč použít exec?

Děkuji za osvětlení.
juriad
Profil
1) regulární výraz ve formě literálu: /re/ musí být konstantní a známý dopředu autorov skriptu; oproti tomu v konstrukci s Regex můžeš regulární výraz vytvářet až za běhu (třeba hledání sekvence znaků na základě podmínky, kterou zadá uživatel)
https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions

2) liší se tím, nad jakým typem se provádí (také je rozdíl, jak se chová opakované spuštění)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

3) pokud tě zajímají podvýsledky (hledáš všechny emailové adresy: /([a-z.]+)@([a-z.]+)/g a zajímají tě zvlášť jména a domény), musíš použít exec, protože match nevrací v případě globálního hledání části
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

4) viz 3); odpovídá tomu, že výsledek preg_match_all je ukecanější než výsledk match

Opravdu doporučuji studovat dokumentaci přímo u zdroje (https://developer.mozilla.org/en-US/docs/Web/JavaScript). Takové nuance, na které se ptáš, se u interpretací a souhrnů často vypouští.
Václav Netolický
Profil *
juriad:
Děkuji za vysvětlení, vše jsem pochopil až na 4)

Jak tomu mám rozumět, že je ukecanější? S použítím exec vidím výhody jen lastIndexu (když mne nebudou zajímat jednotlivé části viz 3). Je např. rychlejší než match?
Radek9
Profil
Václav Netolický:
Pokud tě nezajímají jednotlivé části, stačí ti match. Jak bylo řečeno, exec je vlastně iterační funkce (musí se proto volat v cyklu), ale jako bonus ti vrací i jednotlivé části výrazu. Při jednoduchých regulárech, kdy chceš opravdu jen něco najít (případně pozici něčeho), ti to asi bude k ničemu. Tohle je spíš pro parsování složitějších výrazů a pro extrakci dat z nich.
Václav Netolický
Profil *
Fajn, už jsem si to vyzkoušel na několika případech a zdá se, že tomu rozumím, tak díky a já jdu ještě do lesa na houby a budu o tom přemýšlet :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: