![](/img/trans.png)
[英]Regex match first character once, followed by repetitive matching until end
[英]JS Regex - Match until the end of line OR a character
這是我要匹配的示例:
Match everything after this:::
one
two
three
Match this also:::
one
two
three
___
but not this
我的代碼:
const thing = /[^:]:::\n([\s\S]*)(_{3}|$)/gm
我希望它匹配 ':::' 之后的所有內容,但是當它看到 ___ 時結束,或者如果不存在,則文本輸入結束,$。
它適用於第一個示例,但它繼續匹配第二個示例中___ 之后的文本。
任何想法如何使這正確?
我只對第一個分組的結果感興趣。 我必須對 (_{3}|$) 進行分組,否則它會創建一個無限循環。
您嘗試的模式[^:]:::\n([\s\S]*)(_{3}|$)
匹配太多,因為[\s\S]*
會一直匹配到最后. 然后當在字符串末尾時,有一個交替(_{3}|$)
匹配下划線或字符串末尾的 3 次。
然后模式可以確定匹配字符串的結尾。
您可以使用捕獲組,並匹配以下所有不以___
開頭的行
[^:](:::(?:\n(?!___).*)*)
[^:]
匹配任何字符,除了:
(
捕獲組 1
:::
逐字匹配(?:\n(?.___).*)*
匹配所有不以___
開頭的連續行)
關閉組 1或者如果支持只獲得匹配,則使用負向后看,斷言 not :
到左邊
(?<!:):::(?:\n(?!___).*)*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.