Javascript正则表达式:仅匹配最后一个模式

时间:2014-08-08 20:03:49

标签: javascript regex

上下文:我有一些动态生成的HTML,里面可以嵌入javascript函数调用。我试图用正则表达式提取函数调用。

示例HTML字符串:

 <dynamic html>

   <script language="javascript">
       funcA();
   </script>

 <a little more dynamic html>

   <script language="javascript">
       funcB();
   </script>

我的目标是提取文本&#34; funcA();&#34;和&#34; funcB();&#34;从上面的片段(作为单个字符串或具有两个元素的数组将是好的)。我到目前为止的正则表达式是:
var regexp = /[\s\S]*<script .*>([\s\S]*)<\/script>[\s\S]*/gm;

使用html_str.replace(regexp, "$1")仅返回&#34; funcB();&#34;。

现在,当HTML中只有一组<script>个标签时,这个正则表达式工作正常,但是当有多个时,它只在使用replace()方法时返回最后一个。即使删除&#39; / g&#39;修饰符仅匹配最后一个函数调用。我仍然是正则表达式的新手,所以我知道我在这里缺少一些基本的东西......任何帮助我指向正确方向的人都会非常感激。我已经做了一些研究,但仍然无法解决这个问题。

1 个答案:

答案 0 :(得分:5)

你的通配符都很贪心。这意味着它们不仅符合您的期望,而且符合您的代码中的可能性。

让他们都非贪婪(.*?),它应该有效。