2011-07-19 5 views
0

Je suis en train de l'extrait du ProductValue du bit suivant de Javascript:Comment extraire une valeur Javascript en utilisant des expressions régulières?

<script language="javascript" type="text/javascript"> 
lpAddVars('page','Section','womens'); 
lpAddVars('page','CartTotal','0.00'); 

    lpAddVars('page','ProductID','43577'); 
    lpAddVars('page','ProductValue','128.00'); 

</script> 

Je ne pense pas que Belle soupe javascript parse donc je pense que la meilleure façon de faire peut-être utiliser une expression régulière, mais je suis très nouveau à re et jusqu'ici rien que j'ai essayé semble fonctionner. Des conseils ou de l'aide sur la façon d'accomplir cela?

Merci!

Répondre

1

Cela devrait fonctionner:

import re 

javascript_text = ''' 
    <script language="javascript" type="text/javascript"> 
    lpAddVars('page','Section','womens'); 
    lpAddVars('page','CartTotal','0.00'); 

     lpAddVars('page','ProductID','43577'); 
     lpAddVars('page','ProductValue','128.00'); 

    </script> 
''' 

product_value = re.findall(r"ProductValue.*,['|\"](.*)['|\"]", javascript_text) 

# at this point, product_value = ['128.00'] 

Alors ce qui est "ProductValue *, '| \." [' | \ "]" Faire même?

"ProductValue *, '| \." [' | \ "]".

ProductValue - juste une chaîne de caractères que vous recherchez

* - nous voulons un montant de caractères, donc des espaces, des guillemets simples, quel que soit

, - nous cesserons permettant de faire correspondre tous les personnages une fois que nous arrivons à la ""

[ '| \ "] "*." - nous vouloir faire correspondre soit un seul devis ou une double citation

(. *) - c'est le bit qui nous intéresse réellement, qui peut être n'importe quels caractères

['| \ "] - encore une fois, nous arrêterons le". * "Une fois que nous atteindrons simple ou double fermeture devis

a partir de ce moment-là, je ferais quelque chose comme:

product_values = [] 
for value in product_value: 
    value = value.strip() # get rid of any excess whitespace 
    value = float(value) # ProductValue appears to be a float of some sort 
    product_values.append(value) # store the value 
+0

merci, cela fonctionne très bien! la qualité des réponses sur SO ne cesse jamais de m'étonner :) –

0
/'ProductValue'\s*,\s*(.*?)\s\)/ 
+0

merci! En fait, je sais si peu sur les expressions régulières que je ne suis même pas sûr de la façon de mettre en œuvre cela. 're.search ("/'ProductValue' \ s *, \ s * (. *?) \ s \)/", html)'? –

Questions connexes