Javascript 正则表达式仅获取多行匹配
尝试使用正则表达式仅匹配多行字符串。但是下面的正则表达式同时匹配单行和多行。如何使用regex实现这一点 RegexJavascript 正则表达式仅获取多行匹配,javascript,regex,Javascript,Regex,尝试使用正则表达式仅匹配多行字符串。但是下面的正则表达式同时匹配单行和多行。如何使用regex实现这一点 Regex ('|"|`)[\s\S]*?(\1) 测试字符串 "not a match" "need to match" 多行字符串是至少包含一个换行符的字符串。这样你就可以写作了 ('|"|`)[\s\S]*?\n[\s\S]*(\1) 但这将与整个示例相匹配,因为[\s\s]*也与字符串分隔符相匹配 你可能想试试 '[^
('|"|`)[\s\S]*?(\1)
测试字符串
"not a match"
"need
to
match"
多行字符串是至少包含一个换行符的字符串。这样你就可以写作了
('|"|`)[\s\S]*?\n[\s\S]*(\1)
但这将与整个示例相匹配,因为[\s\s]*
也与字符串分隔符相匹配
你可能想试试
'[^']*?\n[^']*?'|"[^']*?\n[^']*?"|`[^']*?\n[^']*?`
但该字符串与转义引号不匹配。您的输入字符串在双引号之间包含三个子字符串:
“不匹配”
“\n”
“需要\n匹配”
“
作为下一个双引号对的前导”
。(['“`])(?:(?!\1)。*\n[\s\s]*?\1
regex就是这个问题的一个例子
在这方面,更安全的做法是只使用正则表达式,然后过滤掉所有包含换行符的匹配项:
const text='“不匹配”\n“需要\n匹配”;
常数rx=/(['“`]).\1/gs;
console.log(text.match(rx).filter(x=>x.includes('\n'))
可能太复杂了
('|"|`)(?:(?:(?!\1).)+?\n)+(?:(?!\1).)+\1
细分:
┌─ 匹配其中的一个或多个
│ ┌─ 后跟一个或多个
│ │ 非引号字符
│ │ ┌─ 比赛结束
┌────────┴─────────┐┌─────┴────┐┌┤ 类似引号的字符
(“|“|`”)(?:(?:(?!\1)。+?\n)+(?:(?!\1)。+\1
└──┬──┘ │ │ ││ │
└────────────────────────────── 匹配类似于引号的字符
│ │ ││ │ 并在第1组中捕获它
│ │ ││ │
│ └──┬─┘└─────│──────── 匹配任何字符
│ └────────│──────── 这不是一个类似引号的字符
└────┬─────────┘
└──────── 并匹配其中一个或多个,尽可能少
然后换行
不确定是否有办法消除重复,但是“[^”]+\n[^”]*“[^']+\n[^']*'”[124;”[^`]+\ n[^`]*
应该可以很好地工作。请参阅。我建议在使用当前正则表达式得到结果后,过滤掉不包含\n
的匹配项。您也可以使用(['''''''''''''''''''`])
,而不是('.\124''''>>)
和
而不是[\s\s]
如果支持s
标志,那么否决票的原因是什么?