2013-05-09 24 views
6

Sto mantenendo un vecchio codice quando ho raggiunto un headscratcher. Sono confuso da questo modello di regex: /^.*$/ (fornito come argomento in textFieldValidation(this,'true',/^.*$/,'','').

Interpreto questo regex come:

  • /^ = modello aperto
  • = indicare un singolo carattere di qualsiasi valore (tranne EOL)
  • * = partita 0 o più volte
  • . $ = partita fine della linea
  • /= vicino modello

Quindi ... penso che questo pat la terna corrisponde a tutto, il che significa che la funzione non fa altro che sprecare cicli di elaborazione. Ho ragione?

+0

I miei sensi programmatore sono formicolio, cinque paramerts in una funzione javascript, e uno di loro è ' 'true''. Non può essere buono – NicoSantangelo

+0

@NicoSantangelo: è terribile –

risposta

5

Esso corrisponde a una sola riga di testo.

Non riuscirà a trovare una stringa multilinea, perché ^ corrisponde all'inizio di input e $ corrisponde alla fine dell'input. Se ci sono dei nuovi segni di linea (\n) o di ritorno a capo (\r) in mezzo, fallisce.

Ad esempio, 'foo'.match(/^.*$/) restituisce foo.

Ma 'foo\nfoo'.match(/^.*$/) restituisce null.

+0

Si noti inoltre che non riuscirà ad associare una stringa contenente un '\ r'. –

+0

grazie, corretto –

+0

Grazie Oleg ... –

1

Sì, hai ragione. Questa regex corrisponde a qualsiasi stringa che non contiene EOL (se dotall = false) o qualsiasi stringa (se dotall = true)

+1

Non penso che JS abbia dotall. –

+0

Non so come regexp siano implementate in JS, ma in altre lingue dotall può essere abilitato con /../s o passare flag alla funzione di compilazione – Maxim

+0

Sì, JS non ha flag/s. –

5

^ "Inizio all'inizio."
. "Corrispondenza niente ..."
* "0 o più volte"
$ "alla fine della linea."

Sì, hai ragione, corrisponde a vuoto o qualcosa del genere.

E a handy little cheat sheet.

5

Il regexp verifica che la stringa non contenga alcun \n o \r. I punti non corrispondono alle nuove linee.

Esempi:

/^.*$/.test(""); // => true 
/^.*$/.test("aoeu"); // => true 
/^.*$/.test("aoeu\n"); // => false 
/^.*$/.test("\n"); // => false 
/^.*$/.test("aoeu\nfoo"); // => false 
/^.*$/.test("\nfoo"); // => false 
+0

Grazie Florian ... –

Problemi correlati