Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Regex per rilevare solo link interni conteneti il rel noopener

    Salve,
    vorrei elaborare una regex per cercare solo i link interni contenenti i rel="noopener"
    Ad esempio ricercare questo link:
    codice:
    <a href="https://www.linkinterno.it/2018/10/titolo/" target="_blank" rel="noopener">anchor text</a>
    In questo caso le regex dovrebbe essere:
    codice:
    href="https://www.linkinterno.it(.*?)rel="noopener"
    e dovrebbe funzionare in quanto l'ho controllata con il seguente regex test:
    https://www.freeformatter.com/regex-tester.html

    Tuttavia non mi vengono ricercati i link interni in modo corretto, ossia solo quelli con rel="noopener". Come posso risolvere?

    Grazie
    News In Web - il social news per tutti
    --> https://www.newsinweb.net <--

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,917
    Ciao, a seconda del linguaggio in cui stai usando questa regex (nello specifico, il pattern che hai postato) e a seconda del carattere delimitatore usato per il pattern stesso, potresti avere dei conflitti con alcuni caratteri (come lo slash / o il doppio apice "), perché si tratta di caratteri speciali utilizzati proprio per definire il pattern della regex all'interno del linguaggio di programmazione utilizzato. In tal caso potrebbe essere necessario usare un diverso carattere di delimitazione, oppure andrebbero fatti degli escape per risolvere i conflitti con i relativi caratteri all'interno del pattern.

    Nello strumento di test, da te linkato, non vengono riportati errori con quel pattern, ma non mi è chiaro (forse mi sfugge) quale sia il linguaggio in cui sono contestualizzati i test. Nelle indicazioni viene riportato che è basato su JavaScript e che usa una relativa libreria, ma questo non chiarisce la contestualizzazione del linguaggio in cui dovrebbe essere usato tale pattern.

    Personalmente preferisco utilizzare questo strumento: regex101.com
    dove, oltre a diverse opzioni, è possibile impostare il linguaggio per il quale contestualizzare i propri test (vedi l'elenco di scelta sotto la voce "FLAVOR", sulla sinistra). Sulla destra sono descritti singolarmente gli elementi che compongono il pattern testato, e sono riportati eventuali errori contestualmente al linguaggio usato e alle altre impostazioni, come il carattere delimitatore. In tal modo si possono evitare sorprese al lato pratico.

    In sostanza, il tuo pattern risulta corretto in un contesto JavaScript usando come delimitatore un carattere diverso da / (slash) o da " (doppio apice), ad esempio usando ' (singolo apice) o ` (backtick). Risulta corretto anche con altri linguaggi, usando altri delimitatori che non creino conflitti con i caratteri stessi del pattern. Forse per tale motivo non sono riportati errori nello strumento da te linkato, perché di per se il pattern è corretto a livello generico.

    La domanda quindi nasce spontanea: in quale linguaggio dovrai usare tale regex?
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quella espressione regolare non è corretta in quanto in una situazione come questa:
    codice:
    <a href="https://www.linkinterno.it/2018/10/titolo/" target="_blank">anchor text</a> <a href="https://www.linkinterno.it/2018/10/titolo/" target="_blank" rel="noopener">anchor text</a>
    matcha
    codice:
    href="https://www.linkinterno.it/2018/10/titolo/" target="_blank">anchor text</a> <a href="https://www.linkinterno.it/2018/10/titolo/" target="_blank" rel="noopener"
    In generale le espressioni regolari non sono adatte al parsing ed è difficile gestire gli edge cases in presenza di nesting e pairing.
    Nel tuo caso tuttavia c'è un carattere delimitatore chiaro: > quindi puoi risolvere sostituendo a . (ogni carattere) [^>] (ogni carattere diverso da >)

    Tuttavia ti consiglio di fare un sacco di testing su scenari diversi in quanto è difficile comprendere se il comportamento desiderato sia corretto o meno.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Grazie intanto ad entrambi per le esaurienti risposte

    Allora, il concetto è quello di trovare se all'interno di un href è presente il nome del sito (in modo che posso capire che si tratta di un link interno) e che contenga il rel="noopener".
    Ho adattato al meglio la regex, modificandola in questo modo:
    codice:
    www.sito.it.*rel="noopener"
    e togliendo il protocollo https:// che può generare errori.

    Purtroppo però ancora qualcosa non va. Premetto che la regex mi serve per uno spider seo (ScreamingFrog), in cui è possibile impostare delle regex mirate per le ricerche all'interno di un sito web.

    Attendo vostre delucidazioni in merito e grazie come sempre
    News In Web - il social news per tutti
    --> https://www.newsinweb.net <--

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