2017-07-27 1 views
0

Supposons Ceci est mon textecorrespondant à un motif de chaîne qui commence et se termine par une chaîne dans imacros

SET abc "<select name="ctl00$ContentPlaceHolder1$ddlyear" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddlyear\',\'\')', 0)" id="ctl00_ContentPlaceHolder1_ddlyear" class="page-heading" style="background-color: rgb(255, 244, 244); width: 95px; outline: 1px solid blue;"> <option selected="selected" value="Select Year">Select Year</option> <option value="2000">2000</option> 
<option value="2001">2001</option> 
<option value="2002">2002</option> 
<option value="2003">2003</option> 
<option value="2004">2004</option> 
<option value="2005">2005</option>  
<option value="2006">2006</option>  
<option value="2007">2007</option>  
<option value="2008">2008</option>  
<option value="2009">2009</option>  
<option value="2010">2010</option>  
<option value="2011">2011</option>  
<option value="2012">2012</option>  
<option value="2013">2013</option>  
<option value="2014">2014</option>  
<option value="2015">2015</option>  
<option value="2016">2016</option>  
<option value="2017">2017</option>  
</select>" 

Et je veux juste extraire années du texte ci-dessus, donc je correspond à la chaîne à regarder comme <option value= et se terminant chaîne comme </option> et obtenir la chaîne entre ces deux motifs

SET text EVAL("var s=\"{{abc}}\"; s.match(\"(?![<option value=])(.*)(?=</option>)\");") 

Mais il donne tout le texte à nouveau et si je

SET text EVAL("var s=\"{{abc}}\"; s.match(\"(?![<option value=])(.*)(?=</option>)\");s[0]") 

Cela me donne "<" Une suggestion où je me trompe? Merci

Répondre

1

Je pense que vous pouvez essayer une façon plus simple comme ceci:

TAG XPATH="id('ctl00_ContentPlaceHolder1_ddlyear')" EXTRACT=TXTALL 
SET numbers EVAL("'{{!EXTRACT}}'.replace('Select Year[OPTION]', '');") 
PROMPT {{numbers}} 
+0

cela donne la sortie comme "2000 [OPTION] 2001 [OPTION] 2002 [OPTION] 2003 [OPTION] 2004 [OPTION] 2005 [OPTION] 2006 [OPTION] 2007 [OPTION] 2008 [OPTION] 2009 [O PTION] 2010 [OPTION] 2011 [OPTION] 2012 [OPTION] 2013 [OPTION] 2014 [OPTION] 2015 [OPTION] 2016 [OPTION] 2017 " – deepesh

+0

merci pour une percée :) – deepesh

0

Je ne peux pas tester une version imacros, mais votre regex ordinaire utilise à tort les crochets et le lookahead négatif.

Voici une expression régulière qui correspond à ce que vous recherchez (tous les chiffres avant un </option>):

([0-9] *) (= </option>?)

Demo ici: https://regex101.com/r/jA3Al9/2

Edit: comme je l'ai dit que je ne peux pas tester, mais je suppose que vous cherchez:

SET text EVAL("var s=\"{{abc}}\"; s.match(\"([0-9]*)(?=</option>)\");s[0]")

+0

Non, il n » ai pas t travaillé out.it m'a donné "-" comme sortie – deepesh

0

De @ réponse de Shugar ajouté quelques lignes pour obtenir la réponse

TAG XPATH="id('ctl00_ContentPlaceHolder1_ddlyear')" EXTRACT=TXTALL 
SET numbers EVAL("'{{!EXTRACT}}'.replace('Select Year[OPTION]', '');") 
SET numb1 EVAL("'{{numbers}}'.replace(/[OPTION]/g,'');") 
SET numb2 EVAL("'{{numb1}}'.split('[]')") 
PROMPT {{numb2}} 
+1

Une ligne suffit pour la plupart:' SET numbers EVAL ("'{{! EXTRACT}}'. Replace ('Sélectionnez l'année [OPTION]', '') .split ('[OPTION]');") ' – Shugar