正则表达式跨多行捕获两个标记之间的所有内容

时间:2015-11-15 19:12:37

标签: javascript regex

我在Ruby中有这个正则表达式:http://rubular.com/r/eu9LOQxfTj

/<sometag>(.*?)<\/sometag>/im

它成功匹配这样的输入:

<sometag>
  123
  456
</sometag>

哪会返回

123
456

然而,当我在javascript(在chrome中测试)中尝试这个时,它并不匹配任何东西。 javascript的多行标志是否意味着什么呢?

我想在两个给定标签之间非贪婪地捕捉所有内容。 如何使用正则表达式在javascript中完成此操作?这是Debuggex Demo

<sometag>(.*?)<\/sometag>

Regular expression visualization

这不是XML解析。

1 个答案:

答案 0 :(得分:5)

单独使用.时,Javascript不支持多行表达式。您必须使用[\s\S]代替.,以便满足您的需求:

var x = "<sometag>\n\
  123\n\
  456\n\
</sometag>";

var ans = x.match(/<sometag>([\s\S]*?)<\/sometag>/im).pop();

// ans equals " 123  456"

请注意,您仍然需要m修饰符。