lørdag, januar 23, 2021

Løst: javascript find ‘.2ndLvlDn.1stLvlDn’

Daily Rush Debat Programmering Løst: javascript find ‘.2ndLvlDn.1stLvlDn’

  • Forfatter
    Emne
  • #0

    MeanorDljato
    Bruger
    320 indlæg
    Offline

    Nogen som har et stensikkert javascript til at finde ‘.2ndLevelDomainname.1stLevelDomainname’?

    Fx skal scriptet for DailyRush give ‘.dailyrush.dk’.

    Man kan starte ud fra var a=window.location.hostname;

    Jeg kigger selv på det og holder tråden opdateret, men det er altså ret vigtigt at det er et ret gennemført script og skal i hvert fald virke ned til URL indeholdende 3rd level domain name fx forum.doom9.org, hvor forum altså er 3rd level delen.
    Scriptet skulle for forum.doom9.org give ‘.doom9.org’
    Skal bruges til Google Analytics hvis nogen skulle være interesserede.

    Tak.

Viser 15 kommentarer - 1 til 15 (af 18 i alt)
  • Forfatter
    Kommentarer
  • #1

    BCe
    Bruger
    442 indlæg
    Offline

    hrm, skal stavefejlene være konsistente eller skal den bare fjerne tilfældige bogstaver fra url’en ?

    #2

    MeanorDljato
    Bruger
    320 indlæg
    Offline

    #1 Tak, jeg har forbedret teksten.

    #3

    Fille88
    Bruger
    981 indlæg
    Offline

    Du kan bruge regular expressions. Orker dog ikke lige at lave det for dig.

    #4

    MeanorDljato
    Bruger
    320 indlæg
    Offline

    #3 tak den er jeg med på.

    Det kan nok gribes an på forskellige måder (hele tiden med fokus på at det er stensikkert da det skal benyttes til dataindsamling).

    Man kan start med at søge om antal af tegnet ‘.’ er større end 1.

    Hvis antallet ikke er større lægger man bare char’en ‘.’ til window.locati­on.hostname.

    Hvis det er større skal der window.locati­on.hostname søges igennem bagfra til man støder på 1. punktum. Defter skal dersøges igennem igen til man finder 2. punktum.
    Ud fra det kan så dannes hvad jeg søger.
    Men som det ses nedenfor er det altså denne del som vil give udfordring for mig.

    Altså hvad jeg har indtil videre:
    var hostname=window.locati­on.hostname;
    if (… > 1) {…} else {hostname =’.’+hostname;}

    #5

    Kolben
    Bruger
    18.939 indlæg
    Offline

    Prøv at lave en group match på “^.*(\.\w*\.\w*)/”

    P=NP?

    #6

    MeanorDljato
    Bruger
    320 indlæg
    Offline

    #5 Prøver at se om jeg kan bruge hvad du skriver, måske lidt for svært for en begynder som mig…

    Til og med adresser indeholdende 3rd level vil nedenstående være godt nok, men jeg skal have noget mere stensikkert…

    var str = window.location.hostname;
    var patt1 = /\..*\..*/i;
    alert(str.match(patt1));

    #7

    Kolben
    Bruger
    18.939 indlæg
    Offline

    #6
    Når du matcher på .* får du skråstreger med. Det vil du ikke have.

    Udvid ovenstående til “^.*(\.(\w|\-)*\.(\w|\-)*)/” for at få bindestreger med.

    P=NP?

    #8

    MeanorDljato
    Bruger
    320 indlæg
    Offline

    Tror jeg har en sikker løsning på vej med exec() funktionen.
    Den kræver dog manuelt input af mulige løsninger så foretrækker selvfølgelig en fuldt automatiseret metode.

    #9

    MeanorDljato
    Bruger
    320 indlæg
    Offline

    #5 og #7 mange tak, men når jeg kombinerer det med hvad jeg har skrevet i #6 får jeg umiddelbart en script fejl i firebug…

    Men tak.

    #10

    Kolben
    Bruger
    18.939 indlæg
    Offline

    Jeg kan kun stå inde for det regulære udtryk. Javascript har jeg lykkeligt glemt alt om. Det er en del år siden jeg har kodet den slags

    P=NP?

    #11

    Kolben
    Bruger
    18.939 indlæg
    Offline

    Måske skal du escape’e backslash’es:
    “^.*(\\.(\\w|\\-)*\\.(\\w|\\-)*)/”

    P=NP?

    #12

    Had
    Bruger
    2.778 indlæg
    Offline

    Hva med at køre url (tekstrengen) gennem et filter? Det er godt nok java, det her er lavet i, men det er bare for at præsentere idéen. Det er boolean værdien dot, der stopper while løkken. Dvs, den kunne ændres til at stoppe før sidste “.”. Output er her til skærmen, men du bestemmer jo selv hvad du vil med s1 / s2.

    public class Domain
    {
    public static void main(String[] arg)
    {
    String s1, s2;
    boolean dot = true;

    s1 = “level1.level2.level3.dk”;
    System.out.println(s1);
    while (dot==true)

    {
    s2 = s1.substring(+s1.indexOf(“.”)+1);
    s1 = s2;
    System.out.println(s1);
    dot = s1.contains(“.”);
    }

    }
    }

    Output:
    level1.level2.level3.dk
    level2.level3.dk
    level3.dk
    dk

    Unlimited tolerance must lead to the disappearance of tolerance

    #13

    MeanorDljato
    Bruger
    320 indlæg
    Offline

    Hvis nogen skulle have lyst eller bare mulighed for at sende forespørgslen videre til en Javascript haj skal i være meget velkomne.
    Ellers regner jeg med at kommme med en mindre professionel løsning i dag eller måske mere realistisk i morgen…

    #14

    MasterSoren
    Bruger
    2.574 indlæg
    Offline

    Ups forkert tråd

    ?lev ud edrojg ,snælgab reh ted esæl ta fa eregolk tegem ekki velb uD

    #15

    MeanorDljato
    Bruger
    320 indlæg
    Offline

    OK den midlertidige kode jeg benytter til jeg eller gerne : ) en klogere kommer på banen med noget smartere:

    var patt1=new RegExp(‘dailyrush.dk|dr.dk’);
    var a= (‘.’+patt1.exec(window.location.hostname));
    alert(a);

    Denne bør være sikker (med mindre navne indgår flere gange i samme hostname fx dailyrush.dkur.dailyrush.dk, men dette tjekker jeg for), den er dog stadig manuel da jeg selv skal inputte muligheder…

Viser 15 kommentarer - 1 til 15 (af 18 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.