HighDots Forums  

RegExp e le graffe

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss RegExp e le graffe in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
wezzy
 
Posts: n/a

Default RegExp e le graffe - 06-19-2006 , 01:11 PM






Ciao a tutti devo sostituire delle parole con delle graffe all'interno
di un testo. Su firefox tutto bene

var reg = new RegExp('{parola}', 'g');
reg.compile();
testo.replace(reg, 'nuova_parola');

ma su Opera questo non funziona. Ho scoperto che e' il carattere della
graffa a fare casotti anche perche' e' uno dei caratteri speciali nelle
espressioni regolari. Ma come faccio a dirgli che per me e' una semplice
graffa e non ha significati particolari? ho provato un escape alla c
\{parola\} ma senza alcun risultato

Grazie

Reply With Quote
  #2  
Old   
Cristiano Larghi
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 03:44 AM






In data Mon, 19 Jun 2006 19:11:18 +0200, wezzy ha scritto:

Quote:
Ciao a tutti devo sostituire delle parole con delle graffe all'interno
di un testo. Su firefox tutto bene
a me non sembra: ho copiaincollato quanto sotto e non funziona (IE6,
firefox 1.5, opera 8.5).

Quote:
var reg = new RegExp('{parola}', 'g');
reg.compile();
compile *DEVE* ricevere come parametro la regular expression, quello che
hai scritto è errato (quindi, ripeto, non può andare neanche con firefox, a
me segnala immediatamente errore).
var reg=new RegExp();
reg.compile("{parola}","g");
http://www.criosoftware.it/bak/RegExpGraffe.htm

Quote:
testo.replace(reg, 'nuova_parola');
? il metodo replace non sostituisce "testo" ma restituisce il risultato,
ergo
testo=testo.replace...

Quote:
Ma come faccio a dirgli che per me e' una semplice
graffa e non ha significati particolari? ho provato un escape alla c
\{parola\} ma senza alcun risultato
esatto, in generale la sintassi è quella per indicare che un carattere
"speciale" è da considerarsi un carattere "normale".

--
"Ti sei salvato
o sei entrato in banca pure tu?"
A.V.


Reply With Quote
  #3  
Old   
ZER0
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 03:49 AM



On Mon, 19 Jun 2006 19:11:18 +0200, wezzy wrote:

Quote:
ma su Opera questo non funziona. Ho scoperto che e' il carattere della
graffa a fare casotti anche perche' e' uno dei caratteri speciali nelle
espressioni regolari. Ma come faccio a dirgli che per me e' una semplice
graffa e non ha significati particolari?
Facendo l'escape.

Quote:
ho provato un escape alla c \{parola\} ma senza alcun risultato
Questo perché forse l'hai scritto direttamente nella stringa, in questo
modo:

var reg = new RegExp('\{parola\}', 'g');

Ma così facendo, hai fatto l'escape a livello di stringa, non a livello di
regexp. Devi passare alla regexp il carattere "\" quindi se lo inserisci in
una stringa, lo devi raddoppiare:

var reg = new RegExp('\\{parola\\}', 'g');

Se tu invece avessi scritto la regexp letterale, non ne avresti avuto
bisogno (ma immagino che "parola" sia variabile):

var reg = /\{parola\}/g;

--
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)



Reply With Quote
  #4  
Old   
Cristiano Larghi
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 03:50 AM



In data Tue, 20 Jun 2006 09:49:45 +0200, ZER0 ha scritto:

Quote:
Questo perché forse l'hai scritto direttamente nella stringa, in questo
modo:
var reg = new RegExp('\{parola\}', 'g');
pensavo anch'io fosse lo \, ma poi nel test ho tolto lo \ e ha funzionato
tutto comunque...

--
"Run rabbit run
dig that hole, forget the sun
and when at last the work is done
don't sit down, it's time to dig another one"
P.F.


Reply With Quote
  #5  
Old   
ZER0
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 03:59 AM



On Tue, 20 Jun 2006 09:50:57 +0200, Cristiano Larghi wrote:

Quote:
Questo perché forse l'hai scritto direttamente nella stringa, in questo
modo:
var reg = new RegExp('\{parola\}', 'g');

pensavo anch'io fosse lo \, ma poi nel test ho tolto lo \ e ha funzionato
tutto comunque...
Questo perché probabilmente il parser della regexp si accorge che l'uso
delle graffe non matcha la sintassi nella quale vengono usate.

Ciò non toglie che sono un carattere utilizzato nella sintassi delle RegExp,
e quindi è bene farne l'escape, soprattutto perché non è detto che tutti i
parser siano così intelligenti.

E l'escape non viene fatto in quel modo, se si utilizza una stringa per
generare un oggetto RegExp, è questo il punto fondamentale.

Sono pressoché sicuro che se "parola" è un valore numerico, tipo "1", il
parser delle RegExp ti risponde picche.

--
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)



Reply With Quote
  #6  
Old   
ZER0
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 03:59 AM



On Tue, 20 Jun 2006 09:50:57 +0200, Cristiano Larghi wrote:

Quote:
Questo perché forse l'hai scritto direttamente nella stringa, in questo
modo:
var reg = new RegExp('\{parola\}', 'g');

pensavo anch'io fosse lo \, ma poi nel test ho tolto lo \ e ha funzionato
tutto comunque...
Questo perché probabilmente il parser della regexp si accorge che l'uso
delle graffe non matcha la sintassi nella quale vengono usate.

Ciò non toglie che sono un carattere utilizzato nella sintassi delle RegExp,
e quindi è bene farne l'escape, soprattutto perché non è detto che tutti i
parser siano così intelligenti.

E l'escape non viene fatto in quel modo, se si utilizza una stringa per
generare un oggetto RegExp, è questo il punto fondamentale.

Sono pressoché sicuro che se "parola" è un valore numerico, tipo "1", il
parser delle RegExp ti risponde picche, senza un adeguato escape.

--
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)



Reply With Quote
  #7  
Old   
Cristiano Larghi
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 04:00 AM



In data Tue, 20 Jun 2006 09:59:18 +0200, ZER0 ha scritto:

Quote:
Sono pressoché sicuro che se "parola" è un valore numerico, tipo "1", il
parser delle RegExp ti risponde picche, senza un adeguato escape.
sicurissimo anch'io

--
"Run rabbit run
dig that hole, forget the sun
and when at last the work is done
don't sit down, it's time to dig another one"
P.F.


Reply With Quote
  #8  
Old   
ZER0
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 04:02 AM



On Tue, 20 Jun 2006 10:00:26 +0200, Cristiano Larghi wrote:

Quote:
Sono pressoché sicuro che se "parola" è un valore numerico, tipo "1", il
parser delle RegExp ti risponde picche, senza un adeguato escape.

sicurissimo anch'io
Uhm, allora mi sfugge la ragione d'essere del tuo precedente post.

--
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)



Reply With Quote
  #9  
Old   
Cristiano Larghi
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 04:05 AM



In data Tue, 20 Jun 2006 10:02:42 +0200, ZER0 ha scritto:

Quote:
Uhm, allora mi sfugge la ragione d'essere del tuo precedente post.
era per sottolineare proprio il fatto che il compilatore è "intelligente":
mi aspettavo errore, invece probabilmente vede che non c'è un numero (o 2
numeri separati da virgole) tra le graffe e quindi le interpreta come
carattere normale (chissà cosa fa con {1,parola})

Non ho provato con un numero ma senza nulla davanti, magari è "così
intelligente" che le considera caratteri normali anche in quel caso (ma mi
puzza...)
Testato con Firefox 1.5, opera 8.5, IE6.0sp1.

--
"Non sai che ci vuol scienza
ci vuol costanza
ad invecchiare senza maturità"
F.G.


Reply With Quote
  #10  
Old   
ZER0
 
Posts: n/a

Default Re: RegExp e le graffe - 06-20-2006 , 04:10 AM



On Tue, 20 Jun 2006 10:05:54 +0200, Cristiano Larghi wrote:

Quote:
Uhm, allora mi sfugge la ragione d'essere del tuo precedente post.

era per sottolineare proprio il fatto che il compilatore è "intelligente":
Che quelli che hai provato, sono intelligenti. Dato che ogni browser e
linguaggio lo implementa differentemente dagli altri, non è detto che sia
così per tutti.

Per questo l'escape ci deve andare. Il tuo post lasciava presumere che se ne
potesse tranquillamente fare a meno, e non vorrei che qualcuno si lasciasse
traviare.

--
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.