'a|b||c|d'.split(re)
我想要的結果是如何根據孤立角色進行分割?
[ 'a', 'b||c', 'd' ]
也就是說,b
和c
保持,因爲一起有豎條,沒有之一。
我想:
/(?:[^|])\|(?:[^|])/
也就是說,「匹配,但在此之前和分隔符後不捕獲,非豎線」。不,根本不起作用。
(這是在Javascript,但我覺得很多RE庫的工作會以同樣的方式。)
'a|b||c|d'.split(re)
我想要的結果是如何根據孤立角色進行分割?
[ 'a', 'b||c', 'd' ]
也就是說,b
和c
保持,因爲一起有豎條,沒有之一。
我想:
/(?:[^|])\|(?:[^|])/
也就是說,「匹配,但在此之前和分隔符後不捕獲,非豎線」。不,根本不起作用。
(這是在Javascript,但我覺得很多RE庫的工作會以同樣的方式。)
您需要lookaround(/(?<!\|)\|(?!=\|)/
),但回顧後是不是在JavaScript支持。相反,分裂的字符串,嘗試匹配:
'a|b||c|d'.match(/([^|]|\|{2,})+/g)
在你的情況下,由於豎線|
是不是可以用一個字字符:
'a|b||c|d'.split(/\b\|(?!\|)/)
避開JS」缺乏lookbehinds的。
這將拆分第一個|
確保它不是後跟|
。
但是,如果您的分隔項目以符號結尾,它將會失敗 「a。| b || c | d」 - 「a」。將不會被拆分。
我認爲你最好的選擇是遵循@NullUserException的建議並替換'||'與一個佔位符,拆分,並替換回來,或 @ Bergi的解決方案,而不是分裂。
雖然'(?:)'導致它不會將這些匹配放入捕獲組中,它會消耗匹配項,使它給您看到的結果。解決這個問題的最明顯的方法是使用零寬度斷言(lookaround),但JS不支持倒序。 – NullUserException
解決這個問題的一個簡單方法是執行搜索並替換所有'||'的實例,用某種佔位符替換它們,然後在'|'上分割並在之後恢復'||'。 – NullUserException
@NullUserException - 「最明顯的方式」...一個新的使用「明顯」的單詞。 – Malvolio