Newsgroup: it.comp.lang.javascript
Titolo: un problemino con string.replace

Supponiamo di avere una stringa in cui ricorre più volte la barra rovesciata
e di volere trasformare tutte le occorrenze della barra rovesciata in barra
normale.
Insomma di volere trasformate
"123\123\123\123" in  "123/123/123/123"
Come si fa con string.replace?
razie

 normale.
stringa = stringa.replace(/\//g,"\");
dovrebbe funzionare.
Ciao,
--Gabriele

 non in js), come faresti? Io non ho trovato soluzione.
Ammesso e concesso che concordo su un controllo preventivo sulla corretta
forma dei dati da manipolare con JS; se dovesse capitare un problema del
genere, basterebbe creare un tag in cui inserire tale valore e recuperarlo
successivamente. Ad esempio, un campo hidden.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)



 > > stringa = stringa.replace(/\\/g,'/');
Premesso che l'errore è dovuto "evidentemente" alla fretta :-) ... cmq
avevo interpretato la stringa "123\123\123\123\123" come un path
e perciò assunto che fosse inserita in una textbox (o simile).
Questa mia interpretazione è stata determinata dal fatto che
giorni fa, con mozilla, cercando di utilizzare le jslib(
jslib.mozdev.org
) mi
era
sorta l'esigenza di utilizzare dei path con il bakslash \ su win32
e dei path con slash / su linux.
Ma questo è un altro discorso...
A questo punto però volevo farvi un domanda... che utilità potrebbe avere
escapare il carattere '1' con ' \1'?
Ciao.
--Gabriele
P.S. che bel thread animato che ha scatenato un mio "evidente" errore :-)

Adesso spiego quale era il mio problema iniziale.
Avevo letto da qualche parte una faq che suggeriva di ricavare il nome della
pagina corrente da uno split di document.URL secondo "/". Ma mi era venuto
in mente che l'operazione funziona in rete, dove le directory sono segnalate
con slash, ma non in locale perchč Windows mi rappresenta le directory
usando backslash. Avevo quindi pensato ad aggiungere alla funzione un
string.replace. Ma vedo ora che c'č una soluzione piů semplice: sottoporre
la stringa a due split: uno con slash ("\") che funziona in rete ed uno con
backslash (rappresentabile in javascript con "//") che funziona in locale.
Spero di essere stato chiaro
Grazie comunque.


Avevo indovinato allora.... erano 'path'.
--Gabriele

 backslash (rappresentabile in javascript con "//") che funziona in locale.
Ops! Al contrario!

 visto mai? :)
L'unico caso in cui si puo' verificare un esigenza del genere, e' quando
hai una pagina HTML generata dinamicamente lato server con una qualche
tecnologia. E che tu non abbia modo di modificare "direttamente" questo
valore, quanto - eventualmente - di "posizionarlo" gia' stampato.. come se
tu stessi lavorando su un template, per intenderci.
Perche', in qualsiasi altro caso, tu hai modo di modificare la variabile e
non devi lavorare invece direttamente sul contenuto.
Se ti si dovesse mai presentare un caso del genere, basterebbe far stampare
tale stringa entro un tag HTML, invece che dentro uno script js.
Ovvero, riprendendo il concetto di template, se l'applicazione sostituisce
la stringa "#win_path" con il percorso di windows, invece di fare:
var mypath="#win_path"
e ritrovarsi quindi in output qualcosa tipo:
var mypath="c:\windows\"
su cui non e' possibile poi lavorare (per il discorso dei caratteri di
escape); basta *non* passare direttamente la stringa a javascript, ma fare
un "double dispatch":
<div id="fldMypath" style="display:none">#win_path</div>
e quindi otterrai un output del tipo:
<div id="fldMypath" style="display:none">c:\windows\</div>
che puoi tranquillamente assegnare ad una variabile javascript senza
problemi di sequenze di escape:
var mypath=document.getElementById("fldMypath").innerHTML
se si volesse mantenere una compatibilita' maggiore:
<form id="frmHidden"
style="display:none"><textarea>#win_path</textarea></form>
var mypath=document.forms["frmHidden"].elements[0].value;
