簡體   English   中英

正則表達式組與空間匹配

[英]Regex group matches with space

我對正則表達式有一個簡單的問題,但是我不知道要解決它們。 我有字符串(灰色為標簽):

cccc :ddddd bbbb :fgggg aaa aa :ddd ddd cccc :ggggggg

和正則表達式

/(aaa aa|bbbb|cccc)+:([\sa-zA-Z]*)(?:$|\s)/ig

https://regex101.com/r/mR3vK5/1

解析字符串'label'之后, aaa aa被忽略,因為有空間並被帶到第二個匹配項。 我想在插入第二個匹配項到下一個“標簽”或結束行后,先匹配標簽(是否帶空格),冒號和任何內容(帶空格)。

有什么建議么?

如果您知道所有鍵,則可以在正向前行中使用它們,並將值與惰性點匹配:

/(aaa aa|bbbb|cccc):(.*?)(?=$|\s+(?:aaa aa|bbbb|cccc))/gi

參見JS演示:

 var block = "aaa aa|bbbb|cccc"; var rx = RegExp("(" + block + "):(.*?)(?=$|\\\\s+(?:" + block + "))", "ig"); var s = "cccc:ddddd bbbb:fgggg aaa aa:ddd ddd cccc:ggggggg"; while ((m = rx.exec(s)) !== null) { document.body.innerHTML += m[1] + ": " + m[2] + "<br/>"; } 

模式說明

  • (aaa aa|bbbb|cccc) aaa aabbbbcccc
  • : -文字冒號
  • (.*?) -第2組匹配0+任何字符(除了換行符),直到第一個字符都盡可能少...
  • (?=$|\\s+(?:aaa aa|bbbb|cccc)) -(限制.*?匹配的正向超前)
    • $ -...字符串結尾
    • | - 要么...
    • \\s+ -一個或多個空格,后跟...
      • (?:aaa aa|bbbb|cccc) -三種選擇中的任何一種(在非捕獲組中,僅用於分組而不捕獲)

好吧,這會做你想要的

/(aaa aa|bbbb|cccc)+:(\\s*[a-zA-Z]*)(?:$|\\s)/ig

但是,考慮到這個問題,它是高度人為的。

如果您只想獲取標簽(即使鍵有空格),則可以快速輸入以下內容: https : //regex101.com/r/jJ9iI1/3

(?:^|\s)([^:]+):

它以^\\s (開頭或空格字符)開頭。 然后,它簡單地捕獲導致冒號的每個字符(冒號除外)。

...確保全局g已打開

暫無
暫無

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

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