正则表达式 JavaScript 多行组匹配 returns 只是 node.js 中预期结果的一部分

Regex JavaScript multiline group matching returns just part of expected result in node.js

我想要匹配组从 --[[--]] + 之后的一行 contents.match(new RegExp(/--\[\[\s([^]*?)\s--\]\]\s(.*)/, 'g'));

为什么在 https://regex101.com/r/7yjQCS/2 上以 JS 模式测试此正则表达式有效,但在 node.js 中我得到匹配直到 --]]?

-

结果:

--[[ * a * b * c --]]

-

预计:

--[[ * a * b * c --]] function name(x, y) {

-

代码:

var contents = "--[[\n * a\n * b\n * c\n--]]\nfunction name(x, y) {\n ...\n}\n\n--[[\n * a\n * b\n * c\n--]]\nfunction name(x, y) {\n ...\n}"; var inputs = contents.match(new RegExp(/--\[\[\s([^]*?)\s--\]\]\s(.*)/, 'g'));

[^] 是正则表达式领域的错误。

原因是未定义。
一个负数class必须要否定,否则就没有意义。

如果 JS 不抛出错误,则行为是不可预测的。

您应该改用 [\S\s],因为它可以匹配任何字符。

此外,它与您的生产 JS 中的最后一行不匹配的原因
你只允许在行前有一个空格 \s 吗?
由于最后一行是可选的,空格匹配 CRLF
CR 对(在 MS OS 中)。

要解决这个问题,请将其设为开放式 \s+
此外,不需要前两个 \s,因为您在 [[ ]]

之间匹配 any char

最终的正则表达式现在看起来像这样 https://regex101.com/r/7yjQCS/4
适用于任何平台。

--\[\[([\S\s]*?)--\]\]\s+(.*)