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

Javascript 正则表达式跨多行捕获两个标记之间的所有内容,javascript,regex,Javascript,Regex,我在Ruby中有一个正则表达式: 然而,当我在javascript中尝试这个(在chrome中测试)时,它与任何东西都不匹配。 javascript的多行标志是否意味着其他内容 我想在两个给定标记之间不贪婪地捕获所有内容。 如何使用正则表达式在javascript中实现这一点?这是一个 (*) 这不是XML解析。单独使用时,Javascript不支持多行表达式。您必须使用[\s\s]代替,因此满足您需要的示例如下: var x = "<sometag>\n\ 123\n\

我在Ruby中有一个正则表达式:

然而,当我在javascript中尝试这个(在chrome中测试)时,它与任何东西都不匹配。 javascript的多行标志是否意味着其他内容

我想在两个给定标记之间不贪婪地捕获所有内容。 如何使用正则表达式在javascript中实现这一点?这是一个

(*)


这不是XML解析。

单独使用
时,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"
var x=“\n\
123\n\
456\n\
";
var ans=x.match(/([\s\s]*?)/im.pop();
//ans等于“123456”

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

您应该解释,由于没有dotall修饰符,JS不支持
跨越多行。@hwnd good point,添加了说明。你应该编辑正确的答案来改进它们,而不是仅仅对它们投反对票。我没有对你的答案投反对票,只是留下了评论。6年后,
([\s\s]*?)
仍然是我找到的最佳解决方案。在VSCode中,我必须添加
\n
使其成为
([\s\s\n]*?)
<sometag>
  123
  456
</sometag>
123
456
<sometag>(.*?)<\/sometag>
var x = "<sometag>\n\
  123\n\
  456\n\
</sometag>";

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

// ans equals " 123  456"