簡體   English   中英

正則表達式JavaScript多線組匹配只返回node.js中預期結果的一部分

[英]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前行。
由於最后一行是可選的,因此空格與CRLFCR匹配
對(在MS OS中)。

要解決這個問題,請將其打開以結束\\s+
此外,前兩個\\s是不需要的,因為你匹配之間的任何字符 [[ ]]

最終的正則表達式現在看起來像這個https://regex101.com/r/7yjQCS/4
適用於任何平台。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM