2010-11-29 4 views
2

Je veux prendre l'URL de la page en cours (en utilisant la page: env ("caller")) et en extraire une section.analyse l'URL avec les expressions régulières et la méthode de remplacement de KRL

Par exemple, je veux prendre

http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=cats 

et affecter

cats 

à une variable.

Comment est-ce que je ferais ceci avec KRL?

J'ai essayé

url = page:env("caller"); 
query = url.replace("http://www\.google\.com/search\?sourceid=chrome&ie=UTF-8&q=", ""); 

mais il affecte simplement la page entière: env ("appelant") à la requête variable (par exemple http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=cats). Editer: une solution jQuery fonctionnerait très probablement également.

Edit2: @JAM -

L'instruction select vous ne semble pas au courant de travailler. Je l'ai testé sur http://www.google.com/search?q=cats et il n'a pas tiré. Je ne sais pas si l'URL ne correspond pas à la page vue ou quoi (il semble que cela devrait correspondre à moi).

L'application que je le mettre dans:

ruleset a835x36 { 
    meta { 
    name "regex testing2" 
    description << 
>> 
author "" 
logging on 
} 

rule get_query { 
    select when pageview "http://www.google.com/search.*(?:&|?)q=(\w+)(?:&|$)" setting(query) 
     notify("Query",query) with sticky = true; 
    } 
} 

Aussi, je suis à la recherche d'un moyen plus robuste pour obtenir à la requête, puisque Google a plusieurs façons d'atterrir sur une page de résultats de recherche avec les URL ne ressemblera pas http://www.google.com/search?q=cats. Par exemple, aller sur google et chercher des chats n'a donné que http://www.google.com/webhp?hl=en#sclient=psy&hl=en&site=webhp&source=hp&q=cats&aq=f&aqi=&aql=&oq=&gs_rfai=&pbx=1&fp=8ac6b4cea9b27ecb pour l'URL des résultats. Je suppose que je pourrais analyser n'importe quoi avec une regex, cependant ...

+0

Puisque vous posiez au sujet KRL, nous partons du principe que vous voulez faire le traitement sur le côté serveur KNS. Si vous souhaitez une solution jquery, je suppose qu'il existe déjà une réponse à cette question avec une balise jquery. –

Répondre

5

2 façons d'accomplir ce que vous voulez.

1) Dans le bloc pré

pre { 
    queryInURL = page:url("query"); 
    q = queryInURL.replace(re/.*?q=(.*?)(?:$|&.*)/,"$1"); 
} 
  • page: url (« requête ») saisit toute la chaîne de paramètres dans une URL
  • chaîne de remplacement faire pour capturer paramètre de requête spécifique que vous voulez

Exemple complet App Tested

Testé sur url ->http://example.com/?q=cats&wow=cool

alt text

ruleset a60x439 { 
    meta { 
    name "url query test" 
    description << 
     Getting the query from the current page URL 
    >> 
    author "Mike Grace" 
    logging on 
    } 

    rule get_query { 
    select when pageview ".*" 
    pre { 
     queryInURL = page:url("query"); 
     q = queryInURL.replace(re/.*?q=(.*?)(?:$|&.*)/,"$1"); 
    } 
    { 
     notify("Query",queryInURL) with sticky = true; 
     notify("q",q) with sticky = true; 
    } 
    } 

} 

2) Dans l'expression de sélection des règles de la JAM manière a montré

+0

Où est l'amour? Je leur réponds simplement comment je voudrais qu'il réponde. ; –

+1

Merci, Mike! Je n'étais pas au courant de la page: url ("requête"), cela aide beaucoup. – user898763452

+0

Glad it helps! Bonne chance à vous! –

4

Ceci peut être fait dans l'instruction select en utilisant une expression régulière et un groupe de capture (()).

select when pageview "http://www.google.com/search.*(?:&|?)q=(\w+)(?:&|$)" setting(query) 

Les expressions régulières rendent l'instruction select puissante. Assurez-vous de les apprendre! Here est un excellent site d'expression régulière (ou Regex).

Questions connexes