Visualizzazione dei risultati da 1 a 9 su 9

Discussione: espressioni regolari

  1. #1
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    espressioni regolari

    in pratica voglio rilevare da una stringa qualunque

    es: sdfsdfsd sdf sdf dsf value=pippo asdas asdsaf

    la sola parola pippo

    ho fatto così e funge:

    codice:
    stringa= document.getElementById('ciccio').value; 
    
    espr=/ value=(.+)/; 
    		  
    num_ini= stringa.search(espr); 
    num_ini = num_ini+7; 
    stringa=stringa.substr(num_ini);                                
    num_fin = stringa.search(/ /)                                   
              
    document.getElementById('ciccio').value=stringa.slice(0,num_fin);

    ma non si può migliorare?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se tu sai che la stringa che devi estrarre e` SEMPRE compresa tra il carattere = e lo spazio, e che non ci sono altri caratteri = nella stringa, puoi fare cosi`:
    codice:
    var stringa = document.getElementById('ciccio').value; 
    var estr = stringa.replace(/^(.+\=)(.+?)( .+)$/$2/);
    alert ("stringa estratta: "+estr);
    Al posto dell'alert puoi metterci il popolamento del tuo campo.
    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 gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    deve essere compreso tra value= e lo spazio

    posso modificare così?

    var estr = stringa.replace(/^(value=)(.+?)( .+)$/$2/);

    ma mi sono perso qui:
    $/$2/ che significa?

    inoltre ho provato a fare in modo che la parola value possa cambiare

    cioè una volta:
    value=
    casa=
    luogo=

    quindi si dovrebbe creare la reg dinamicamente ma non so proprio come fare

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se l'uguale e` comunque il primo/unico della espressione, non vale la pena comp;icare la Regexp, altrimenti si puo` inserire anche la stringa.

    Comincio ad analizzare la RegExp che ti ho dato:
    /^(.+\=)(.+?)( .+)$/
    ^ inizio stringa
    () raggruppamento (serve per ricuperare il valore con $1, $2, ...
    .+ qualsiasi carattere (almeno uno)
    \= il carattere uguale
    .+? qualsiasi carattere (almeno uno) fino alla prima occorrenza dell'espressione successiva
    .+ qualsiasi carattere (almeno uno)
    $ fine stringa

    Dato che ho raggruppato in tre parti, posso utilizzare i tre raggruppamenti, $1 e` il primo, $2 il secondo, $3 il terzo.
    A me interessa estrarre solo il secondo, per cui sostituisco tutta la stringa con il secondo gruppo (ho usato il metodo .replace). Il risultato lo metto nella variabile a sinistra dell'uguale.

    /^(value ...
    e` sbagliato, dato che la stringa non inizia per value.
    Eventualmente dovrebbe essere:
    /^(.*?value ...
    cioe:
    dopo l'inizio stringa, qualsiasi carattere (da zero in su) fino al primo value

    Ora se vuoi mettere l'opzione value oppure casa oppure luogo, devi inserire tali stringhe in alternativa:

    /^(.+(value|casa|luogo)\=)(.+?)( .+)$/

    Pero` cosi` c'e` una parentesi in piu`, il che implica di sostituire con $3 anziche` $2

    Nota: non ho tenuto conto di eventuali spazi attorno all'= o alla tua stringa (nel tuo esempio non ce n'erano): se serve si possono inserire opzionali.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    grazie

    l'ultima cosa epoi ti lascio stare (per oggi )

    la reg così scritta

    /^(.+(value|casa|luogo)\=)(.+?)( .+)$/

    mi tira fuori quello che c'è o dopo value=, o dopo casa=, o dopo luogo=

    ma in un caso come questo come poteri fare

    es:

    mia_frase= "ci metto dentro casa=mia value=toro luogo=mare"

    e voglio ottenere
    mia,
    toro,
    mare

    non riesco a fare tutto con un ciclo, cioè
    posso sostituire value|casa|luogo con un array

    tipo:

    validatori= array(casa, value, luogo);
    for(i..){

    /^(.+(validatori[i])\=)(.+?)( .+)$/
    }

    non so come si scriva correttamente l'espressione in modo che validatori[i] venga interpretato con il suo valore e non come stringa.

    spero di essermi spiegato perchè io rileggendo mica c'ho capito tanto!

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    La regexp non cambia molto, ma devi togliere i caratteri ^ iniziale e $ finale; devipero` cambiare il metodo della stringa e aggiungi un /g
    Poi pero` devi pulire i singoli elementi estratti
    codice:
    var estr = stringa.match(/.+?(value|casa|luogo)\=).+? /g)
    for(var i=0; i<estr.length; i++) {
      estr[i] = estr[i].replace(/.*?\=(.+?) /);
    }
    Non so se in questo caso si possa fare con una unica RegExp in JS. In Perl userei le extended RE, ma non mi risulta siano disponibili in JS.

    Referenze:
    Per il JS: http://www.devguru.com/technologies/...ipt_index.html

    Per i metodi di stringa in JS: http://www.devguru.com/technologies/...ef/string.html

    Per le RegExp, puoi vedere il link sopra oppure: http://www.perldoc.com/perl5.6.1/pod/perlre.html
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    scusa il ritardo, grazie

    però non riesco a farle funzionare, ottengo sempre errore

    var stringa = document.getElementById('ciccio').value;
    var estr = stringa.replace(/^(.+\=)(.+?)( .+)$/$2/ );
    alert ("stringa estratta: "+estr);


    pooure la
    /^(.+(value|casa|luogo)\=)(.+?)( .+)$/

    ho dimenticato qualcosa?

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    No, sono io che ho fatto confusione: ho mescolato due linguaggi.
    La sintassi corretta:
    codice:
    var stringa = document.getElementById('ciccio').value;
    var estr = stringa.replace(/^(.+\=)(.+?)( .+)$/, $2);
    alert ("stringa estratta: "+estr);
    Nei link che ti ho dato ieri ci sono le regole di sintassi di tutto.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    provo

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.