Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Problema Regex

  1. #1

    Problema Regex

    Salve,
    ho un problema con questo regex:
    codice:
    testo = testo.replace(/\s+/g," ");
    In pratica va a sostituirmi anche gli a capo.. Ho provato ad ovviare al problema togliendo la + e tentando di sostituire gli spazi doppi con un \r\n, ma mi da un errore, unexpected token..
    codice:
    testo = testo.replace("  "," ");

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,669
    Ciao, in effetti il metacarattere \s fa riferimento a diversi caratteri tra cui quelli di ritorno a capo. Nello specifico comprende questa classe di caratteri [\r\n\t\f\v ].

    Se ti interessa individuare solo gli spazi, puoi specificare esattamente lo spazio " " al posto di \s:

    codice:
    testo = testo.replace(/ +/g," ");
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao, in effetti il metacarattere \s fa riferimento a diversi caratteri tra cui quelli di ritorno a capo. Nello specifico comprende questa classe di caratteri [\r\n\t\f\v ].

    Se ti interessa individuare solo gli spazi, puoi specificare esattamente lo spazio " " al posto di \s:

    codice:
    testo = testo.replace(/ +/g," ");
    Stesso errore..!
    SyntaxError: Invalid or unexpected token

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,669
    Non mi pare un errore riferito nello specifico a quell'espressione. Probabilmente la causa è da cercare altrove nel resto del tuo script. Fai eventualmente qualche log.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Ma si presenta solo quando modifico quella riga..
    Posto il codice completo:
    codice:
    function macchinaDaScrivere(id_campo, testo, velocita, posizione){
        var lunghezza = testo.length;
        posizione = posizione || 0;
        if(posizione<lunghezza){
            var carattere = testo.substring(posizione,posizione+1);
            document.getElementById(id_campo).innerHTML=document.getElementById(id_campo).innerHTML.substring(0,posizione)+carattere+"_";      
            setTimeout('macchinaDaScrivere("'+id_campo+'","'+testo+'",'+velocita+','+(posizione+1)+');',velocita);
        }else{
            document.getElementById(id_campo).innerHTML=document.getElementById(id_campo).innerHTML.substring(0,lunghezza);
        }        
    }
    codice:
        var testo = messaggio;
        testo = testo.replace(/ +/g," ");
        macchinaDaScrivere('messaggio',testo,40);

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,669
    Due cose:

    1 - La forma utilizzata per il setTimeout, in cui richiami la funzione sotto forma di stringa, è da evitare. Probabilmente l'errore dipende da questo perché, a seconda di quello che passi come argomenti della funzione, la stringa stessa potrebbe rompersi.
    Meglio usare questa sintassi (vedi documentazione):
    codice:
    setTimeout(macchinaDaScrivere, velocita, id_campo, testo, velocita, posizione+1);
    2 - Per mostrare il testo elaborato stai usando innerHTML, suppongo si tratti di un div. All'interno di un elemento del genere, il testo viene normalmente formattato secondo le direttive HTML per cui i ritorno a capo non vengono comunque considerati, tant'è che di norma si utilizza il tag <br>. Il risultato sarà quindi un testo senza ritorno a capo (anche se ci sono nel testo iniziale), a meno che tu non abbia impostato tale elemento da CSS per fare in modo che contenga del testo preformattato.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Due cose:

    1 - La forma utilizzata per il setTimeout, in cui richiami la funzione sotto forma di stringa, è da evitare. Probabilmente l'errore dipende da questo perché, a seconda di quello che passi come argomenti della funzione, la stringa stessa potrebbe rompersi.
    Meglio usare questa sintassi (vedi documentazione):
    codice:
    setTimeout(macchinaDaScrivere, velocita, id_campo, testo, velocita, posizione+1);
    2 - Per mostrare il testo elaborato stai usando innerHTML, suppongo si tratti di un div. All'interno di un elemento del genere, il testo viene normalmente formattato secondo le direttive HTML per cui i ritorno a capo non vengono comunque considerati, tant'è che di norma si utilizza il tag <br>. Il risultato sarà quindi un testo senza ritorno a capo (anche se ci sono nel testo iniziale), a meno che tu non abbia impostato tale elemento da CSS per fare in modo che contenga del testo preformattato.
    Non si tratta di un div ma di una textarea.
    Comunque ho sostituito il setTimeout ed ora funziona!
    Grazie mille
    Ultima modifica di Luigi636; 22-12-2017 a 00:13

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,669
    Non si tratta di un div ma di una textarea.
    Per modificare il contenuto di una textarea dovresti usare la sua proprietà value anziché innerHTML (per questo ho supposto si trattasse di un div). Comunque, se ti funziona anche così, buon per te
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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 © 2024 vBulletin Solutions, Inc. All rights reserved.