[英]Regex group matches with space
我對正則表達式有一個簡單的問題,但是我不知道要解決它們。 我有字符串(灰色為標簽):
cccc
:dddddbbbb
:fggggaaa aa
:ddd dddcccc
: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 aa
或bbbb
或cccc
:
-文字冒號 (.*?)
-第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.