匹配以imacros中的字符串开头和结尾的字符串模式

时间:2017-07-27 12:37:26

标签: regex pattern-matching match 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>"

我只是想从上面的文本中抽出几年,所以我将凝视字符串匹配为<option value=并将字符串结束为</option>并获取这两种模式之间的字符串

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

但它再次给出了整个文本 如果我做了

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

这给了我"<" 我出错的任何建议? 感谢

3 个答案:

答案 0 :(得分:1)

我认为你可以尝试这样一种更简单的方法:

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

答案 1 :(得分:0)

我无法测试imacros版本,但你的普通正则表达式错误地使用方括号和负向前瞻。

这是一个匹配您正在寻找的正则表达式(</option>之前的所有数字):

  

([0-9] *)(= LT; /选项&GT)

在这里演示: https://regex101.com/r/jA3Al9/2

编辑:正如我所说,我无法测试,但我想你正在寻找:

  

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

答案 2 :(得分:0)

来自@ Shugar的回答添加了几行来得到答案

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}}