Diskuze: Inicializace RegExp - Podivnost
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
var reg, patt, str; // reg = regularni vyraz, regular expression, patt = pattern, vzorec jako v matematice, predpis, str = string
reg = new RegExp('mujregvyraz', 'g'); // g m i x nebo nic - modifikatory, new RegExp('mujregvyraz')
reg = /mujregvyraz/g; // totez
patt = 'mujregvyraz';
reg = new RegExp(patt, 'g');
str = 'table football';
console.log(reg.test(str));
google = regexp test
google = regexp example
Ta tabulka je super, ale k te tabulce jsi nedodal source-code, takze ti nemuzu rici, co mas spatne. Nekdy je nutne regexp znova inicializovat, pri opakovanem pouziti.
Samozrejme, vzorec rika, ze pre @ musi byt spon 1 znak ze zavorky, znacka
+
"+ jedno nebo více opakování, např. a+"
Inicializace pomoci retezce podleha retezcovemu escapovani znaku pomoci
zpetneho lomitka\ . Musis pridat vic lomitek.
^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$ -->
^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[a-zA-z]{2,4}$ // tecka je jakykoliv znak
a nebo tam dej zavorku
'^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-z]{2,4}$' , \\ --> \
'^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+[.][a-zA-z]{2,4}$'
a mimochodem, slo by to napsat takto, pokud se ti ten tvar hodi vic
/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/
/^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$/i
/^[\w\d._-]+@[\w\d0-9._-]+\.\w{2,4}$/i
https://developer.mozilla.org/…jects/RegExp
var regex1 = /\w+/;
var regex2 = new RegExp('\\w+');
console.log(regex1);
// expected output: /\w+/
console.log(regex2);
// expected output: /\w+/
console.log(regex1 === regex2);
// expected output: false
---
var re = /\w+/;
var re = new RegExp('\\w+');
Jeste mozna zajimavost...
<?php
echo "\\"; // vypise \
echo "<script>patt = \"\\\\\";</script>"; // vypise <script>patt = "\\";</script>
Kvuli vypsani lomitka pro regularni vyraz, kdyz chces spesl dodrzet jakesi
formatovani, tak potrebujes 5 lomitek A urcite by se dala vymyslet jeste silenejsi kombinace treba <input
onclick="patt = &guote;\\&guote;" a vypsat to jako php string
source code k tabulce:
const createInputObj = (text, description) => ({ text, description });
const inputs = [
createInputObj('', 'prazdny retezec'),
createInputObj('@email.com', 'chybi prefix'),
createInputObj('[email protected]', 'chybi server'),
createInputObj('muj@email.', 'chybi postfix'),
createInputObj('[email protected]', 'postfix je kratky'),
createInputObj('[email protected]', 'postfix je dlouhy'),
];
const regexpString = new RegExp('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$');
const regexp = new RegExp(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/);
console.log(`| input | inicializace pomoci retezce | inicializace bez pomoci retezce | popis |`);
const generateRow = (input) => console.log(`| ${input.text} | ${regexpString.test(input.text)} | ${regexp.test(input.input)} | ${input.description} |`);
for (const input of inputs) {
generateRow(input);
}
pak uz jen kopirovani z konzole.
PS: Jinak ten regularni vyraz je z lekce o regularnich vyrazech viz. link nahore v prvnim postu.
Jo uz to vidim v te inicializi pomoci stringu je potreba odescapovat (vubec
netusim, zda takove slovo existuje ) jedno zpetne lomitko.
'^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$'
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
'^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-z]{2,4}$'
Diky
Napis jim to tam k clanku do komentare. To je dost zavazna chybka.
Dokonce mozna pridat ten tvuj kod i s vysledkem a pridat tam zobrazeni i reg.
vyrazu. At je tam krasne videt, ze to omitko tam ma smysl, ze se uplne zmeni
reg. vyraz
No to nebude nutne, nebot oni nevytvareji regularni vyraz ze stringu, ale pres ten kod:
var re = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/;
var platny = re.test("[email protected]");
document.write(platny)
To jen ja jsem to vytvoril pres ten string a pak jsem byl zmaten
No, minimalne to tady navozuje ten dojem. A mozna by bylo dobre to tam uvest.
Pripadne odkazat na nejake verohodnejsi zdroj. Treba by stacilo neco jednoduche,
jak jsem vykopiroval ze stranek firefoxu mozily. A zminit tam, ze je to
escapovani kvuli stringu '...' nebo "...".
escape (esc) = uniknout, uprchnout, zachranit. Je to ve smyslu zachranit znaky,
ktere bys tam nemohl zobrazit. Vybral se pro to znak \ a je to psano nekde v
dokumentaci k js, kde je pokec o stringu. Je to hlavne kvuli tomu, abys tam mohl
dat apostrof. Js-regexp pouziva stejny system. Proto, kdyz tam chces dat nektery
ze zakazanych znaku a navic pomoci stringu, musi tam byt tolik lomitek.
'...\'...' = apostrof do stringu, protoze apostrof ohranicuje string,
zacatek, konec
"...\"..."
"...\\..." = lomitko, protoze slouzi k escapovani
U regexpu se jedna o znaky [ \ ^ $ . | ? * + ( )
Za urcitych okolnosti se escapovat nemusi, treba v hranate zavorce.
\. nebo [.]
[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4} // priklad z odkazu
...
var regexp = new RegExp(vzor, modifikátory);
//Nebo
var regexp = /vzor/modifikátory
----
var re = /\w+/; // z firefoxu
var re = new RegExp('\\w+');
Zobrazeno 10 zpráv z 10.