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

    evidenzioare testi con REGEXP

    Ciao,
    ho dei testi racchiusi da // // che voglio evidenziare con una particolare classe CSS. Ad esempio
    // Parla tizio // non è possibile
    // Parla caio // ti dico che è vero

    cercando in rete ho trovato questa funzione (l'ho modificata leggermente) che sfrutta le espressioni regolari, ma sbaglio qualcosa perché si il testo viene evidenziato, ma diventa sempre l'ultimo "parla caio".

    dove sbaglio?

    function highlight () {
    var $query = "//(.*)//";

    var re = new RegExp($query, 'gi');
    var targetHtml = $('#songs').html();
    if(re.test(targetHtml)) {
    var matches = targetHtml.match(re);
    for (i=0; i<matches.length; i++) {
    $('#songs').html(targetHtml.replace(re, '<span class="higher">'+matches[i]+'</span>'));
    }
    }
    var targetHtml = $('#songs').html();
    }
    $(document).ready(function() {
    highlight();
    });

  2. #2
    devo ottimizzare ma ho risolto così:

    for (i=0; i<matches.length; i++) {
    var targetHtml = $('#songs').html();
    $('#songs').html(targetHtml.replace(matches[i], '<span class="higher">'+matches[i]+'</span>'));
    }

    in questo modo evidenzia correttamente.

  3. #3
    Ho modificato la funzione, passandogli ciò che deve cercare e la classe da aggiangiare
    codice:
    function highlight (myRegExp, myClass) {
    var re = new RegExp(myRegExp, 'gi'); 
    var targetHtml = $('#songs').html(); 
    if (re.test(targetHtml)) { 
    var matches = targetHtml.match(re);
    for (i=0; i<matches.length; i++) { 
    var targetHtml = $('#songs').html(); 
    var replace = '<span class="'+myClass+'">'+matches[i]+'</span>'; 
    var find = matches[i]; 
    $('#songs').html(targetHtml.replace(new RegExp(find, 'g'), replace)); 
    } 
    } 
    var targetHtml = $('#songs').html(); 
    alert (targetHtml); 
    }
    Nella versione indicata precedentemente utilizzavo la replace per sostituire il testo, ma sostituiva solo la prima occorrenza. Allora ho aggiunto una nuova RegExp sostituisce tutto.

    Tutto sembra funzionare con highlight('//(.*?)//','higher1');

    ma se cerco di sostituire un testo racchiuso tra due parentesi tonde [ad esempio ((gianni))] aggiunge una sfilza di parentesi tonde che non riesco a capire

    richiamo la funzione con highlight('(\\()(\\().*?(\\))(\\()','higher');

    sbaglio nel definire la regexp?

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Puoi fare il replace in una volta (senza fare cicli) sfruttando meglio la regular expresion
    codice:
    function highlight(myRegExp, myClass){
    	var el=document.getElementById('songs');
    	el.innerHTML=el.innerHTML.replace(myRegExp,'<span class="'+myClass+'">$1</span>');
    }
    da usare così
    codice:
    highlight(/(\/\/.*?\/\/)/gi,'higher1');
    highlight(/(\(\(.*?\)\))/gi,'higher');
    ricorda che i caratteri / e ( sono riservati e quindi va fatto l'escape anteponendo il carattere \

  5. #5
    Funziona perfettamente ed è sintetico.

    grazie mille!

  6. #6
    Ho notato che non funzione se la stringa va a capo, e cioè se ho una situazione tipo la seguente:

    codice:
    //Voce fuori campo 
    in inglese.//
    ho provato ad aggiungere una "s" alla fine dell'espressione regolare (vedendo gli esempi di stringhe che vanno a capo) ma il risultato è che non funziona più il codice.

    codice:
    highlight(/(\/\/.*?\/\/)/s,'higher1');

  7. #7
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    prova cosi
    codice:
    highlight(/(\/\/.*?\/\/\s)/gi,'higher1');
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  8. #8
    ciao, ho provato ha modificare la REGEXP ma anche così non funziona se vado a capo.
    (funziona invece per gli elementi sulla stessa riga)

  9. #9
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    il punto equivale a qualunque carattere tranne il ritorno a capo.
    Potresti usare una RE così
    codice:
    /(\/\/[^\v]*?\/\/)/gi
    questo [^\v] equivale a qualunque carattere diverso dal tab verticale

  10. #10
    ora va. grazie mille!

    in realtà ci sono delle tabulazioni e le prende ugualmente.

    avete una buona guida sulle regex con esempi pratici?
    credo che debba studiare un bel po'...

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.