Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
Tomáš "chlastyml" Kacálek:3. září 15:04

Ahoj, kdyz jsem zkousel, zde na sit, studovat RegExp, tak v prvnim lekci jsem se trochu ztratil v tom, jak inicializovat instanci RegExp.

https://www.itnetwork.cz/…vyrazy-regex

Mam kod:

const input = "[email protected]";

const regexpString = new RegExp('^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$');
const regexp = /^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/;

console.log('regexpString', regexpString.test(input)); // output: regexpString true
console.log('regexp', regexp.test(input)); // output: regexp false

vstupni retezec by nemel projit, ale kdyz vytvorim RegExp pomoci retezce, tak projde.
Nema nekdo poneti proc?

Dekuji :)

PS: zkousim to pres node.js v11.10.0

Zkusil jsem: Pokud zkusim jine vstupni data, tak:

inicializace pomoci retezce:

const regexpString = new RegExp('^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$');

inicializace bez pomoci retezce:

const regexp = new RegExp(/^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/);
input inicializace pomoci retezce inicializace bez pomoci retezce popis
  false false prazdny retezec
@email.com false false chybi prefix
[email protected] true false chybi server
[email protected] false false chybi postfix
[email protected] false false postfix je kratky
muj@email.comma true false postfix je dlouhy

Vsude by melo byt false. Posledni sloupec rika proc :)

Chci docílit: Jde mi o pochopeni co se deje :)

 
Odpovědět 3. září 15:04
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. září 8:39
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.

http://www.regexp.cz/

  1. ^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$
  2. @email.com
  3. nic
  4. javascript --> neshoduje se

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._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$ -->
^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+.[a-zA-z]{2,4}$ // tecka je jakykoliv znak
a nebo tam dej zavorku
'^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\\.[a-zA-z]{2,4}$' , \\ --> \
'^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+[.][a-zA-z]{2,4}$'

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 4. září 8:39
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. září 8:42

a mimochodem, slo by to napsat takto, pokud se ti ten tvar hodi vic
/^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/
/^[a-z0-9._-][email protected][a-z0-9._-]+\.[a-z]{2,4}$/i
/^[\w\d._-][email protected][\w\d0-9._-]+\.\w{2,4}$/i

 
Nahoru Odpovědět 4. září 8:42
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. září 8:47

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+');
  • mas tu to lomitkovani
  • a mas tu take zobrazeni regularniho vyrazu, aby ses mohl podivat, ze vyraz je spravny console.log(re­gex1);
  • a taky jsou tam vypsane modifikatory/flag g m i s u y
 
Nahoru Odpovědět 4. září 8:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. září 9:47

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 :)

 
Nahoru Odpovědět 4. září 9:47
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Peter Mlich
Tomáš "chlastyml" Kacálek:4. září 12:50

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('[email protected]', 'chybi postfix'),
    createInputObj('[email protected]', 'postfix je kratky'),
    createInputObj('[email protected]', 'postfix je dlouhy'),
];

const regexpString = new RegExp('^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$');
const regexp = new RegExp(/^[a-zA-Z0-9._-][email protected][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.

 
Nahoru Odpovědět 4. září 12:50
Avatar
Odpovídá na Peter Mlich
Tomáš "chlastyml" Kacálek:4. září 12:55

Jo uz to vidim v te inicializi pomoci stringu je potreba odescapovat (vubec netusim, zda takove slovo existuje :D) jedno zpetne lomitko.

'^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$'

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

'^[a-zA-Z0-9._-][email protected][a-zA-Z0-9._-]+\\.[a-zA-z]{2,4}$'

Diky :)

 
Nahoru Odpovědět 4. září 12:55
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. září 12:58

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 :)

 
Nahoru Odpovědět 4. září 12:58
Avatar
Odpovídá na Peter Mlich
Tomáš "chlastyml" Kacálek:4. září 13:01

No to nebude nutne, nebot oni nevytvareji regularni vyraz ze stringu, ale pres ten kod:

var re = /^[a-zA-Z0-9._-][email protected][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 :D

 
Nahoru Odpovědět 4. září 13:01
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:5. září 7:50

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._-][email protected][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+');
 
Nahoru Odpovědět 5. září 7:50
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.