正则表达式 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+(.*)
我想要匹配组从 --[[
到 --]]
+ 之后的一行 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
,因为您在 [[ ]]
最终的正则表达式现在看起来像这样 https://regex101.com/r/7yjQCS/4
适用于任何平台。
--\[\[([\S\s]*?)--\]\]\s+(.*)