[英]Regex JavaScript multiline group matching returns just part of expected result in node.js
我希望匹配組來自--[[
to --]]
+之后的一行with 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'));
[^]
是正則表達式中的錯誤。
原因是它未定義。
否定階級必須有一些否定的東西,否則就沒有意義。
如果JS沒有拋出錯誤,則行為是不可預測的。
您應該使用的是[\\S\\s]
因為它匹配任何字符。
另外,它與生產JS中的最后一行不匹配的原因
是你只允許一個單一的空白\\s
前行。
由於最后一行是可選的,因此空格與CRLF
的CR
匹配
對(在MS OS中)。
要解決這個問題,請將其打開以結束\\s+
。
此外,前兩個\\s
是不需要的,因為你匹配之間的任何字符 [[ ]]
最終的正則表達式現在看起來像這個https://regex101.com/r/7yjQCS/4
適用於任何平台。
--\\[\\[([\\S\\s]*?)--\\]\\]\\s+(.*)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.