Newsgroup: it.comp.lang.javascript
Titolo: RegEx x Url

Vorrei una espressione che mi tornasse vero quando non esiste la 
parola "index" nell'url che inizia con "
www.repubblica.it
" e 
viceversa.
P.e in:
http://www.repubblica.it/2008/08/dirette/sezioni/esteri/georgia-
guerra/caucaso-19-agosto/index.html
ho provato con:
www.repubblica.it/.*?[
^(index)].*?\.html
ma ovviamente non va perché prima di "index" ci sono altri caratteri 
diversi da "index".
-- 
http://interno.netsons.org

 viceversa.
viceversa è la seguente:
/www\.repubblica\.it.*index.*/
il contrario dovrebbe essere
[^www\.repubblica\.it.*index.*]
ma meglio provare perchè non sono sicuro

 
questa mi pare di no.
a me serve comunque non solo il caso che non abbia la parola index ma 
che l'url sia sempre di repubblica e non p.e. di google.
-- 
http://interno.netsons.org

 viceversa.
La domanda è mal posta. Se ti avessero fatto una regexp seguendo
queste indicazioni, su un URL quale:
http://www.repubblica.it/2008/08/dirette/sezioni/esteri/georgia-guerra/caucaso-19-agosto/index.html
Avrebbe fallito. Dato che l'URL non inizia con 
www.repubblica.it
bensì con "
http://www.repubblica.it
". Per noi non fa differenza,
ma quando si ragiona in termini di stringhe e regexp sì.
Dato che, una regexp del genere:
/www\.repubblica\.it.*index.*/
matcha ogni stringa che abbia al suo interno 
www.repubblica.it
 e
che sia seguita dal termine index.
Quindi anche una cosa del tipo:
http://www.miosito.it/point-to/?host=www.repubblica.it&index=34
Quindi innanzitutto devi aggiustare il tiro, definendo meglio le
specifiche di partenza.
Per esempio, la regexp potrebbe essere:
	/^
http://www
\.repubblica\.it.*index.*/
In questo modo eviti il caso di cui sopra.
Inoltre non è chiaro se vuoi matchare tutti gli URL che hanno il
termine "index", a prescindere dalla sua posizione, oppure se il
tuo scopo è matchare tutti gli URL che finiscono con index.html.
In questo modo puoi raffinare ancora meglio la regexp.
Per quanto riguarda la regexp inversa invece, solitamente in JS
si nega direttamente la condizione.
Ovvero, si mantiene la stessa regexp, ma cambia lo statement:
	va re = /^http:\/\/www\.repubblica\.it.*index.*/;
	if ( url.search(re) > -1 ){
		/* corrispondenza trovata */
	}else{
		/* corrispondenza non trovata */
	}
Quindi, se nel tuo caso hai unicamente la seconda condizione:
	if ( url.search(re) == -1 ){
		/* corrispondenza non trovata */
	}
Questo anche per un discorso di retrocompatibilità.
E' vero, ci sono anche dei casi particolari in cui non puoi fare
uso di un codice del genere, e devi includere la negazione nella
regexp stessa.
In questo caso, puoi optare per una sintassi del genere:
	/^http:\/\/www\.repubblica\.it(?!.*index.*)/;
Ma ci sono vecchi browser che i "negative lookahead matches" non
li supportano; e sinceramente non ho avuto modo di testare sugli
attuali browser se tutti si comportano nelle medesima condizioni
a parità di regexp: IE6 ad esempio, ha delle differenze in certi
casi così dovrebbe essere con IE7 dato che condividono lo stesso
script engine; Opera ha sempre avuto le sue fisime sulle regexp,
che mi auguro abbia superato).
-- 
~ Io ho una filosofia semplice:
Riempi ciò che è vuoto. Vuota ciò che è pieno. Gratta ciò che prude.
(A. R. Longworth)