Newsgroup: it.comp.lang.javascript
Titolo: regular expression: tr

Ciao a tutti,
devo sostiruire dei caratteri in una stringa.
Usando le regexp ed in perl, farei così: 
$s =~ tr/LRMSNTPUQV/0516273849/;
in javascript come posso fare?
grazie a tutti,
tanilo

 $s =~ tr/LRMSNTPUQV/0516273849/;
Eh ok, ma sai, qua si parla di javascript...nel senso che non riesco a
capire cosa possa significare la sintassi sopra indicata, e di conseguenza
non posso/so tradurtela...
in generale per sostituire p.e. la virgola con punto alla stringa s:
s=s.replace(/,/gi,"."); //g=global, i=case insensitive che ovviamente nel
caso della virgola non ha senso
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.



oops.... scusami :-P
praticamente quella regular expression sostituisce le L con 0, le R con 5,
e così via. Tutto in una volta.
Se devo fare tutti quei cambiamenti, devo fare una s.replace per ogni caso?
grazie lo stesso :-)
tanilo

 Se devo fare tutti quei cambiamenti, devo fare una s.replace per ogni caso?
Temo di sì...posso dire [quasi] sicuramente che non esiste nulla di già
"pronto", quindi sicuramente devi farti la tua function.
Mi ha però incuriosito, dammi qualche minuto...
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 Mi ha però incuriosito, dammi qualche minuto...
eheh

 eheh
Secondo me c'è una strada più veloce; quello che mi è venuto in mente è:
 String.prototype.replaceEx=function(source,rep) {
  var ris=this;
  for(var i=0;i<source.length;i++) 
   ris=ris.replace(eval("/"+source.substr(i,1)+"/g"),rep.substr(i,1));
  return ris;
 } //replaceEx
Da chiamare con qualcosa del tipo
var ris=new
String("Laq2R43MS324NfTPfU2Qf4V").replaceEx("LRMSNTPUQV","0516273849");
Sempre meglio che non fare 400 replace in cascata... :-/
Non mi piace perché lavora su relazione 1-1 (e quindi non serve, per
esempio, per sostituire maiuscole con minuscole, a meno di non elencare
tutte le lettere dell'alfabeto)
Così a naso si potrebbe, come secondo parametro del replace, mettere una
function, ma non so se e come è fattibile perché viene chiamata quando il
"find" è già stato fatto...forse mettendo una function "find" come primo
parametro e una "replace" come secondo, boh, bisognerebbe fare un po' di
test.
Ma so già che se Zer0 passa da queste parti mi tirerà le orecchie e
indicherà una strada "monoriga"... :-)


 in javascript come posso fare?
Non esiste un'istruzione equivalente, quindi dovresti adattarti alla 
situazione.
Se il tuo caso fosse proprio quello dell'esempio, avrei riordinato la 
stringa cosi': LMNPQRSTUV in modo da avere la posizione ordinale dei 
caratteri coincidente con la loro corrispondenza numerica.
Quindi:
var sSchema = "LMNPQRSTUV";
alert("UNA STRINGA QUALUNQUE".replace(new 
RegExp("["+sSchema+"]","g"),function(){return 
sSchema.indexOf(arguments[0])}));
Questo per farti notare:
- il metodo replace di javascript che accetta come primo parametro una 
stringa o una RegExp e come secondo una stringa o un riferimento a una 
funzione che puo' valutare match ed eventuali submatch.
- le RegExp possono essere valori letterali: /[LMNPQRSTUV]/g, ma possono 
essere generate dinamicamente tramite il costruttore dell'oggetto 
appropriato.
P.S. per Cristiano: finalmente sono a casa e ho avuto il tempo e il 
newsserver per rispondere...

 newsserver per rispondere...
P.S. per gli altri.
Il p.s. per Cristiano era perche' ho sfogato con lui la mia mancanza di 
un news server da cui rispondere al volo, sputandogli addosso una 
soluzione monca. Al volo perche' manca tempo in modo ossessionante nel 
periodo. E il periodo manca di aggettivi per rispetto alla buona 
creanza, il periodo.
Saluti a tutti quindi, complimenti per le benedette faq che prendono 
forma. Bentornato villoso Catarsi. Ad maiora.

 newsserver per rispondere...
Vista tua mail, grazie, me la salvo e me la studierò bene alla prima
occasione. Bentornato.
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 sSchema.indexOf(arguments[0])}));
Perň cosě a naso quanto sopra non ottiene in risultato desiderato.
Ho letto documentazione su perl ~tr (translation), se sSchema č piů lungo
dei corrispondenti caratteri da sostituire per definizione si prende
l'ultimo carattere.
Da ciň ho ottenuto questo:
String.prototype.replaceTR=function(source,rep) {
 return this.replace(new RegExp("["+source+"]","g"),
  function() {
   return
(source.indexOf(arguments[0])<rep.length?rep.substr(source.indexOf(arguments[0]),1):rep.substr(rep.length-1,1));
 });
}
Che mi sembra funzionare correttamente, almeno da 2-3 prove fatte al volo.
Metto in linea, fammi sapere se posso citarti (con e-mail) oppure
preferisci di no.
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 preferisci di no.
http://www.criosoftware.it/default25.aspx


 
http://www.criosoftware.it/default25.aspx
grande!!!
anche se devo dire che mi devo mettere un po' a studiare quello che hai
scritto, perchè non mi è chiarissimo quello che fa la funzione :-P
grazie mille :-)
ciao,
tanilo

 grazie mille :-)
Di niente (e grazie anche allo Scarta che mi ha delucidato su replace e uso
delle function).


[...]
 > Perň cosě a naso quanto sopra non ottiene in risultato desiderato.
 > Ho letto documentazione su perl ~tr (translation), se sSchema č piů lungo
 > dei corrispondenti caratteri da sostituire per definizione si prende
 > l'ultimo carattere.
No, hai sicuramente ragione. Mai scritta una riga in perl e non ho letto 
la reference.
Visto che non esiste un'istruzione equivalente in js ho suggerito di 
adattarsi al caso: voleva essere solo un'esempio sulle possibilita' di 
un replace.
 > Da ciň ho ottenuto questo:
[...]
 > Che mi sembra funzionare correttamente, almeno da 2-3 prove fatte al 
volo.
 > Metto in linea, fammi sapere se posso citarti (con e-mail) oppure
 > preferisci di no.
Sempre volentieri, ma magari quando ci metto del mio: anche stavolta ho 
svolto le funzioni di promemoria, niente piu'.
Quando capitera' l'occasione solo salvami dallo spam selvaggio e 
maschera il mascherabile.
Curiosamente incredibile quanto mi abbia salvato il mio essere orso 
(bruno): i bastardoni per ora combinano il fallace suffisso con un 
dominio obsoleto.
Chissa'.
Hanno comunque imparato gia' troppo.
Mi tocchera' freddarli.

 >>.replace(new RegExp("["+sSchema+"]","g"),function(){return
 >>sSchema.indexOf(arguments[0])}));
 >
 > ma cosi` sostituisce con l'oggetto function(), non con $1... no?
No, la stringa sostitutiva e' il valore restituito dalla funzione.

 Allora Safari e` strano...
Dimmi dimmi, che ancora non mi sono organizzato e non ce l'ho sottomano.
P.S.
Entro una settimana dovrei avere finalmente in mano una mela: un i-mac 
davvero sottocosto, ma per un po' di test dovrebbe andare piu' che bene.
Quali sono i software che e' "obbligatorio" avere nel nostro lavoro?

 Per il resto dipende da cosa fai, se hai dubbi chiedi (anche in pvt)
Approfittero'. Grazie mille.

 dominio obsoleto.
:-)
Invece il qui presente da 10 anni usa in chiaro indirizzo mail (da un po'
ho aggiunto un "nospam", ma troppo tardi) e nome-cognome...e quindi ha
dovuto acquistare un antispamming violento!
