Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636

    occorrenza di un certo numero di ripetizioni di un carattere

    spiego meglio quanto detto nel titolo, voglio contare il numero di occorrenze di una stringa formata da un certo numero di ripetizioni di un carattere, e voglio anche che il numero di ripetizioni sia esattamente uguale.

    es.

    voglio contare tutte le triplette del carattere x in una frase ignorarndo le n-uple con n diverso da 3

    quindi in una stringa del tipo "xxxoxxxx" voglio trovare soltanto la prima tripletta

    se costruissi un pattern del tipo /x{3}/ e lo passassi a match nel seguente modo

    var stringa = "xxxoxxxx";
    var pattern = /x{3}/g;
    var res = stringa.match(pattern).length;

    res sarebbe uguale 2, ma è sbagliato per quello che voglio fare io, inoltre voglio aggiungere che la dimensione delle stringhe è variabile.

    Ho provato pure a usare come pattern /[^x]x{3}[^x]/g , ma non va.

    Qualcuno saprebbe dirmi come costruire il pattern?

    Grazie in anticipo per la risposta

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    scusa ma con questo pattern non funziona?

    /x{3}[^x]/g

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    no perchè quell'espressione regolare per matchare richiede che dopo la tripletta di x deve esserci per forza un carattere diverso da x quando invece si potrebbe essere a fine stringa, e non considera cosa sta prima della tripletta. Se metto nel pattern [^x] prima della tripletta, risolverei il secondo problema però non considererebbe la tripletta a inizio stringa.

    Tuttavia per quello che devo fare io ho trovato una soluzione alternativa, ma sono a un passo dalla soluzione, per un errore penso di sintassi in eval che non riesco a trovare.

    In pratica da un stringa lunga n dovrei trovare e distinguere tutte le n-uple di dimensione compresa tra 3 e n.
    Potrei benissimo fare

    var nuple = new Array();
    for(var i=3; i<=n; i++){
    nuple[i] = stringa.match(eval("/x{"+i+"}/g")).length;
    for ( var j = i-1; j>3; j--){
    nuple[j]-=nuple[i];
    }
    }

    A ogni ciclo i levo dalle nuple di grado minore il numero delle nuple di grado i, visto che all'iterazione i+1 le i+1-uple saranno parte delle j-uple (3<j<i) la cosa funziona.

    A questo punto l'array nuple alla i-esima posizione mi darebbe il numero di occorrenze della nupla di grado i.

    Al di la del ragionamento contorto il problema è molto semplice, cosa sbaglio con eval?

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    var stringa = "xxxoxxxxxxxoxxxoxxxxxxxxxxxxxxxx";
    var pattern = /[^x]x{3}[^x]/g;
    var resS = ('o'+stringa+'o').match(pattern);
    resL = resS?resS.length:0;

    alert(resL)

    Gestisce anche il caso non vi siano occorrenze
    ps: scusa il trucco delle 'o'
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    una soluzione potrebbe essere qualcosa del genere:

    /^x{3}[^x]|[^x]x{3}[^x]|[^x]x{3}$/g

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    Originariamente inviato da br1
    ps: scusa il trucco delle 'o'
    Ma di che, in guerra, amore e programmazione ogni mezzo è lecito

    Comunque ora vanno entrambe i metodi sia il tuo che il mio (più contorto).

    Grazie mille.

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