Javascript regexp捕获匹配由字符分隔

时间:2016-07-21 16:46:29

标签: javascript regex

我有一个像

这样的字符串
<zk>
   <window>
       ...
       <script>
          ...
          var chart = new google.visualization.PieChart(zk.Widget.$("$piechart_3d").$n());
          chart.draw(data, options);  
       </script>

       <div id="piechart_3d"></div>
   </window>
</zk>

我试图捕捉像classifier1:11,classifier2:,classifier3和classifier4

这样的术语

所以这些分类器后面可以跟一个分号。

到目前为止,我想出了

classifier1:11:some text1##classifier2:fdglfgfg##classifier3:fgdfgfdg##classifier4

但这似乎没有抓住classifier4,不知道我在这里缺少什么

2 个答案:

答案 0 :(得分:1)

根据您的模式,您可以使用这样的正则表达式:

([^#]*)(?::|$)

<强> Working demo

答案 1 :(得分:1)

您的案例中的分类器似乎包含任何单词字符,其间可能包含单个:,并以数字结尾。

因此,您可以使用

/(\w+(?::+\w+)*\d)[^#]*/g

请参阅regex demo

<强>解释

  • (\w+(?::+\w+)*\d) - 第1组捕获
    • \w+ - 一个或多个[a-zA-Z0-9_](字)字符
    • (?::+\w+)* - 1 + : s以及1 + 1个字符的零个或多个序列
    • \d - 数字应位于此组的末尾
  • [^#]* - 除分隔符#以外的零个或多个字符。

JS:

var re = /(\w+(?::+\w+)*\d)[^#\n]*/g; 
var str = 'classifier4##classifier1:11:some text1##classifier2:fdglfgfg##classifier3:fgdfgfdg\nclassifier1:11:some text1##classifier4##classifier2:fdglfgfg##classifier3:fgdfgfdg##classifier4';
var res = [];
 
while ((m = re.exec(str)) !== null) {
    res.push(m[1]);
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";