Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    RegExp per cambiare i ../

    Ciao, ho una stringa che contiene dei percorsi relativi, esempio: href="../../pagina2.htm" e poi href="../pagina1.htm"
    dovrei fare una RegExp che mi elimini i ../ , come posso fare?

    Devo fare 2 replace?
    così:

    stringa=stringa.replace(/href=\"\.{2}\/\.{2}\//gi,"href="");
    e
    stringa=stringa.replace(/href=\"\.{2}\//gi,"href="cartella/");

    oppure c'è un sitema per usare una unica RegExp, io a seconda di quanti ../ ci sono devo inserire un percorso diverso però...
    Oltre a questo la sintassi delle mie RegExp è giusta?

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Io farei una cosa di questo tipo: toglie tutti i gruppi ../ oppure ..\ dalla stringa:
    codice:
    stringa=stringa.replace(/\.{2}[\/\\]/g, "");
    Nel tuo caso /g non serve, perche` cerchi una stringa che non si puo` ripetere.

    E comunque se vuoi togliere i gruppi ../ che stanno dopo una determinata stringa (nel tuo caso href=" ), dovresti salvarti il pezzo che togli e rimettercelo nel replace:
    codice:
    stringa=stringa.replace(/^(href=[\"\'])(\.{2}\/)+/i, '$1');
    Nei tuoi codici c'e` un errore nel replace (secondo parametro): non puoi usare il carattere virgolette dentro una stringa limitata dalle virgolette: se devi usare le virgolette puoi limitare la stringa con apici.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao a tutti,

    visto che il replace è diverso a seconda che sia ../ o ../../ devi usare peffozza 2 regularexpression. l'href iniziale io non lo considererei
    codice:
    stringa = 'href="../pagina1.htm" e poi href="../../pagina2.htm"'
    re1 = /(\.\.\/){2}/gi
    re2 = /\.\.\//gi
    document.write(stringa+'
    '+stringa.replace(re1,'').replace(re2,'cartella/')+'
    ')
    se però devi cambiare solo i percorsi degli href io guarderei se il delimitatore è con virgolette o con apice
    codice:
    stringa = 'href="../pagina1.htm" e poi href="../../pagina2.htm" e ancora href=\'../pippo1.htm\' e ancora href=\'../../pippo2.htm\''
    re1 = /(href=["'])\.\.\/\.\.\//gi
    re2 = /(href=["'])\.\.\//gi
    document.write(stringa+'
    '+stringa.replace(re1,'$1').replace(re2,'$1'+'cartella/')+'
    ')

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da Mich_
    Nel tuo caso /g non serve, perche` cerchi una stringa che non si puo` ripetere.
    perché non si può ripetere? :master:

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da willybit
    perché non si può ripetere? :master:
    Perche` la stringa cercata inizia con href=
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Originariamente inviato da Mich_
    Perche` la stringa cercata inizia con href=
    ma se nella stringa ci sono più href= senza la g fai il replace solo le primo

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se ho capito correttamente, lui vuol togliere i ../ dalla stringa di un link.
    A quel punto http:= sta solo all'inizio della stringa, mentre i ../ possono ripetersi.

    ... ma ho visto dalle tue RE che tu hai interpreato diversamente.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367

    Re: RegExp per cambiare i ../

    Originariamente inviato da SuperBillo
    Ciao, ho una stringa che contiene dei percorsi relativi, esempio: href="../../pagina2.htm" e poi href="../pagina1.htm"
    già io ho interpretato diversamente... cioè che nella stringona ci siano più percorsi da modificare

  9. #9
    Grazie delle risposte!

    Aveva capito bene Willybit...

    Mi è venuto in mente però un altro problema, io devo cercare tutti gli href=" perchè aggiungo il percorso assoluto ai links (ricavo la mia stringa con innerHTML poi vorrei reinserirla "in chiaro") quindi aggiungo il percorso anche nel caso il link non abbia dei ../ , il problema nasce quando il link contiene http:// , io dovrei fare in modo che nel caso il link sia assoluto non venga aggiunto il percorso e nel caso sia relativo venga aggiunto il percorso, ho provato così ditemi se la RegExp è giusta:

    stringa=stringa.replace(/href=\"^http/gi,percorso);

    mi chiedo è giusto mettere ^http così oppure dovrei metterlo tra parentsi?

    percorso è una variabile con href=" più il percorso assoluto più /

  10. #10
    Ciao, mi sono accorto che l'ultima mia impostazione era sbagliata... Sono riuscito a trovare la soluzione che mi serviva!

    La soluzione è questa,credo sia corretta, prima sostituisco tutti i ../../ e i ../ con i relativi percorsi (percorso 2 per ../../ e percorso 1 per ../), poi ripasso la stringa e controllo i rpimi sette caratteri, se questi contengono solo caratteri o numeri vuol dire che non sono ne file: ne http: ne mailto: perchè non hanno il : e quindi gli aggiungo il mio percorso assoluto!


    codice:
    stringa=stringa.replace(/(\.\.\/){2}/g,percorso2).replace(/=\"\.\.\//gi,percorso1);
    	
    stringa=stringa.replace(/(href=\")(\w{7})/gi,percoso0+'$2');

    Mi è venuto però in mente un dubbio, il link potrebbe avere un nome tipo ant_sito.htm oppure potrebbe chiamarsi pag.htm, in questo caso ho pensato di negare solo l'esistenza del :

    quindi così:

    stringa=stringa.replace(/(href=\")([^:]{7})/gi,percoso0+'$2');

    ho provato e funziona, ma volevo assicurarmi solo che la sintassi fosse corretta e che davaneti al : non ci andasse uno \

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.