[英]Javascript — Regex — Blacklist of multiple words to END with a partial match
我已經閱讀了關於StackOverflow的許多問題,包括這個問題, 這個問題 ,甚至閱讀了Rexegg的最佳技巧 ,這也是這里的一個問題。 我找到了這個 ,它可以用在所有行上,但是不能“解決所有壞詞”。 這些都沒有幫助我,所以我去:
在Javascript中 ,我有一個很長的正則表達式模式。 我正在嘗試匹配類似句子結構中的序列,如下所示:
1 UniquePrefixA [some-token]和[some-token]想要帶[some-token]看一些猴子。
2 UniqueC [some-token]想要帶[some-token]到商店。 UniqueB,[some-token]再次出現在模式中。
3 UniquePrefixA [some-token]使用[some-token]到[some-token]。
請注意,每個模式都以唯一的前綴開頭。 遇到該前綴表示模式開始。 如果在捕獲過程中再次遇到該模式,則不應捕獲第二個事件,然后停止。 我將捕獲到該前綴之前的所有內容。
如果在模式的后面沒有遇到前綴,則需要繼續匹配該模式。
我也在使用捕獲組(不再重復,因為捕獲組僅返回該組的最后一個匹配項)。 捕獲組的內容需要返回,因此我使用的是非貪婪的匹配。
這是我的模式和工作示例
/(?:UniquePrefixA|UniqueB|UniqueC)\s*(\[some-token\])(?:and|\s)*(\[some-token\])?(\s|[^\[\]])*(\[some-token\])? --->(\s|[^\[\]])*<--- (\[some-token\])?(\s|[^\[\]])*/i
基本上是按特定順序的2種重復模式:
(\s|[^\[\]])* // Basicaly .*, but excluding brackets
(\[some-token\]) // A token [some-token]
我怎樣才能使比賽持續過去的話的黑名單?
我希望這種情況在我畫三個箭頭的情況下發生。 等效於Any字符,但不包括此列表的內容:(UniquePrefixA | UniqueB | UniqueC)(在捕獲組1中看到)。
我可能需要更好地了解負面的前瞻性,或者它是否可以處理一組問題。 最重要的是,我想知道否定的前瞻性方法是否可以支持一系列選項?或者是否有更好的方法? 如果答案是“你做不到”,那也很酷。
我認為,更易於維護的解決方案是將您的任務分為兩部分:
查找從您的任何唯一前綴開始的每個文本塊 ,直到字符串的下一個或結尾。
處理每個這樣的塊,尋找您的一些令牌,以及它們之間的內容。
執行第一個任務的正則表達式應包括3個部分:
(?:UniquePrefixA|UniqueB|UniqueC)
-尋找任何唯一前綴的非捕獲組。 ((?:.|\\n)+?)
-一個捕獲組-要捕獲以進行進一步處理的片段(請參見下面的注釋)。 (?=UniquePrefixA|UniqueB|UniqueC|$)
-正向超前,查找字符串的任何唯一前綴或結尾(您要查找的停止條件 )。 綜上所述,整個正則表達式如下所示:
/(?:UniquePrefixA|UniqueB|UniqueC)((?:.|\n)+?)(?=UniquePrefixA|UniqueB|UniqueC|$)/gi
注意:不幸的是,正則表達式的JavaScript風格沒有實現單行 ( -s )選項。 因此,不僅僅是.
在上面的捕獲組中,必須使用(?:.|\\n)
,表示:
\\n
( .
)以外的任何字符, \\n
。 由於重復標記( +?
)與兩個變體有關,因此將這兩個變體“包圍”到一個非捕獲組中,以限制變體( |
兩面)。
注意?
在+
之后,表示不願意使用的版本。
因此,正則表達式的這一部分(捕獲組)將匹配任何字符序列, 包括 \\n
,如您所料,在下一個uniqie前綴(如果有)之前結束。
第二項任務是將另一個正則表達式應用於捕獲的塊(組1),尋找[some-token]
和它們之間的內容。 您沒有指定每個塊到底要做什么,所以我不確定第二個正則表達式應該包含什么。 也許只要匹配[some-token]
to [some-token]
就足夠了?
為了確保模式不會出現在重復字符序列中,例如(\\s|[^\\[\\]])*
,請注意, \\s
包含在[^\\[\\]]
因此可能只是[^\\[\\]]*
,是在重復模式的左側和內部添加一個否定的超前查詢(類似於^
lentgh匹配斷言為零),以便對每個字符進行檢查:
((?!UniquePrefixA)(\s|[^\[\]]))*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.