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

    Estrazione sottostringa

    Buongiorno, dalla descrizione evidenziata in grigio di questo foglio vorrei estrarre nel campo titolo la sottoscringa a sinistra del primo di questi caratteri:

    / (spazio e barra)
    : (due punti)

    . - (punto spazio trattino)

    Nel caso in esame (primo esempio), quindi:
    *Zibaldone di pensieri / Giacomo Leopardi ; a cura di Fabiana Cacciapuoti ; con un preludio di Antonio Prete. - Nuova ed. tematica condotta sugli Indici leopardiani. - Milano : Feltrinelli, 2019. - LVI, 1231 p. : ill. ; 23 cm
    Risultato sottostring nel campo titolo: *Zibaldone di pensieri

    Nel secondo esempio:
    *A riveder le stelle : Dante, il poeta che inventò l'Italia / Aldo Cazzullo. - Milano : Mondadori, 2020. - 278 p. ; 21 cm. ((In quarta di copertina: eBook disponibile

    Risultato sottostring nel campo titolo: *A riveder le stelle

    Nel terzo esempio:
    Le *mille e una notte. - Milano : Fabbri, 2007. 158 p. : ill. ; 25 cm. ((Note Traduzione di Arianna Giorgia Bonazzi
    Risultato sottostring nel campo titolo: Le *mille e una notte

    Ho notato che ci sono diversi metodi, ma ho difficoltà ad applicarli al caso.
    Mille grazie!
    Ultima modifica di Annuitcoeptis; 06-05-2023 a 20:20

  2. #2
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    Devi utilizzare le espressioni regolari.

    https://developer.mozilla.org/en-US/...Objects/RegExp

  3. #3
    Mhm grazie, un po' complicato il RegExp... Per cominciare ho provato col primo esempio e funziona, ma non saprei come combinare tutti i casi:
    codice:
    tmp = document.querySelector('div.meta.tito div.evidence.isbd').innerText;
    tmp = tmp.substring(0, tmp.indexOf('/'));
    document.getElementById("dsArea0").value = tmp;

    Ho provato invano con:
    codice:
    tmp.indexOf('/|:|. -'));
    Ultima modifica di Annuitcoeptis; 07-05-2023 a 15:00

  4. #4
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    Vedi se questo esempio ti puo aiutare.

    codice:
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
        <p id="test1">
            *Zibaldone di pensieri / Giacomo Leopardi ; a cura di Fabiana Cacciapuoti ; con un preludio di Antonio Prete. -
            Nuova ed. tematica condotta sugli Indici leopardiani. - Milano : Feltrinelli, 2019. - LVI, 1231 p. : ill. ; 23
            cm
        </p>
        <p id="test2">
            *A riveder le stelle : Dante, il poeta che inventò l'Italia / Aldo Cazzullo. - Milano : Mondadori, 2020. - 278
            p. ; 21 cm. ((In quarta di copertina: eBook disponibile
        </p>
        <p id="test3">
            Le *mille e una notte. - Milano : Fabbri, 2007. 158 p. : ill. ; 25 cm. ((Note Traduzione di Arianna Giorgia
            Bonazzi
        </p>
        <script>
            const p1 = document.getElementById('test1')
            const p2 = document.getElementById('test2')
            const p3 = document.getElementById('test3')
            const re = /(\w+\s)?\*[\w+].+?(\/|\:|\.\s\-)/
     
            const text1 = re.exec(p1.textContent)[0].replace(/\/|\:|\.\s\-/, "")
            const text2 = re.exec(p2.textContent)[0].replace(/\/|\:|\.\s\-/, "")
            const text3 = re.exec(p3.textContent)[0].replace(/\/|\:|\.\s\-/, "")
            console.log(text1)
            console.log(text2)
            console.log(text3)
        </script>
    </body>
    
    </html>

  5. #5
    Grazie, ho cercato di tradurre così per la userscript che sto utilizzando su quella pagina (il sito è protetto), ma non intercetta nulla:

    codice:
    tmp = document.querySelector('div.meta.tito div.evidence.isbd').innerText;
    
    const re = /(\w+\s)?\*[\w+].+?(\/|\:|\.\s\-)/
    const tmp = re.exec(tmp.replace(/\/|\:|\.\s\-/, "");
    
    document.getElementById("dsArea0").value = tmp;
    Ultima modifica di Annuitcoeptis; 07-05-2023 a 16:27

  6. #6
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    perchè usi il replace quando puoi fare tutto con le regexp?
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  7. #7
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    Seguendo la struttura della tua pagina html dovresti fare cosi:

    codice:
    const description = document.querySelector('div.meta.tito div.evidence.isbd').textContent
    const textArea = document.getElementById('dsArea0')
    const re = /(\w+\s)?\*[\w+].+?(\/|\:|\.\s\-)/
    const title = re.exec(description)[0].replace(/\/|\:|\.\s\-/, "")
    textArea.value = title

  8. #8
    Grazie mille, ninja72, funziona benissimo! Una domanda: in alcuni casi dovrei cancellare il valore autoestratto nel campo "Titolo" con un semplice click in una qualsiasi area della pagina che non sia il pulsante "Conferma", proprio come faccio in questo altro caso. Ho provato ad aggiungere analogo script, ma in questa pagina non sembra funzionare aggiungendo quanto segue al tuo script:
    codice:
    const clearField = (e) =>{
    const btnConfirm = document.querySelector('a.button.confirm');
    if (btnConfirm.contains(e.target)) return;
    title = "";
    window.removeEventListener("click", clearField);
    };
    window.addEventListener("click", clearField);

    Dove sbaglio? Grazie di nuovo!
    Ultima modifica di Annuitcoeptis; 07-05-2023 a 18:33

  9. #9
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    E' un po difficile seguirti, diciamo che se prendiamo la pagina che mi hai linkato precedentemente vedo che ci sono due bottoni di conferma, dunque andrebbe utilizzato querySelectoAll('a.button.confirm') altrimenti prende solo il primo bottone.
    Io lo sto provando sulla mia pagina di test è funziona, non so come stai operando dunque fai le opportune modifiche e test.

    ps. Ricorda di aprire una discussione nuova per ogni nuova problematica, altrimenti i moderatori ci linciano.

    codice:
    const btnSearch = document.querySelectorAll('a.button.confirm')
            Array.from(btnSearch).forEach(btn => {
                btn.addEventListener('click', () => {
                    textArea.value = ""
                })
            })

  10. #10
    Ho cercato di forzare per non aprire una discussione in tutto identica a quella già svolta (chiedo venia ai moderatori)... Comunque ho risolto rimpiazzando title con textArea.value, grazie mille, Ninja, buona serata!!!
    Ultima modifica di Annuitcoeptis; 07-05-2023 a 19:07

Tag per questa discussione

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.