簡體   English   中英

JS Regex - 匹配直到行尾或一個字符

[英]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.

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