GOOGLE ADS

mercredi 27 avril 2022

Obtenir des parties d'une URL (Regex)

Étant donné l'URL (une seule ligne):
http://test.example.com/dir/subdir/file.html

Comment puis-je extraire les parties suivantes à l'aide d'expressions régulières :

  • Le sous-domaine (test)

  • Le domaine (example.com)

  • Le chemin sans le fichier (/dir/subdir/)

  • Le fichier (fichier.html)

  • Le chemin avec le fichier (/dir/subdir/file.html)

  • L'URL sans le chemin ( http://test.example.com )

  • (ajoutez tout autre que vous jugez utile)

  • L'expression régulière devrait fonctionner correctement même si j'entre l'URL suivante :

    http://example.example.com/example/example/example.html


    Solution du problème

    J'ai quelques années de retard à la fête, mais je suis surpris que personne n'ait mentionné que la spécification Uniform Resource Identifier comporte une section sur l'analyse des URI avec une expression régulière. L'expression régulière, écrite par Berners-Lee, et al., est :

    ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
    12 3 4 5 6 7 8 9

    Les chiffres de la deuxième ligne ci-dessus ne servent qu'à faciliter la lisibilité ; ils indiquent les points de référence pour chaque sous-expression (c'est-à-dire chaque parenthèse appariée). Nous nous référons à la valeur correspondant à la sous-expression en tant que $. Par exemple, en faisant correspondre l'expression ci-dessus à

    http://www.ics.uci.edu/pub/ietf/uri/#Related

    donne les correspondances de sous-expression suivantes :

    $1 = http:
    $2 = http
    $3 = //www.ics.uci.edu
    $4 = www.ics.uci.edu
    $5 = /pub/ietf/uri/
    $6 = <undefined>
    $7 = <undefined>
    $8 = #Related
    $9 = Related

    Pour ce que ça vaut, j'ai trouvé que je devais échapper aux barres obliques en JavaScript :

    ^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

    Aucun commentaire:

    Enregistrer un commentaire

    Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

    Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...