[英]regex: Match word only when another word is not present
我有這個正則表達式
/^(?!(.*(Ink|Cartridge).*))(?:.*(\b - Black$\b))/
以下是我的樣本
no match string
Simple match string - Black
Unmatched line with lowercase - black
Unmatched line with the word Ink within - Black
Unmatched line with the word Cartridge within - Black
Unmatched line with the string' - Black' before the end
我的正則表達式與整行2匹配,但是我試圖僅匹配字符串末尾的單詞“-黑色”,而不匹配整個字符串。
正則表達式語法應基於JavaScript正則表達式。
有任何想法嗎?
如果僅需要匹配單詞“ -Black”,則正確的正則表達式為:
/- Black/
上面的正則表達式正好匹配- Black
問題所要求的- Black
。
但是,實際上您比“匹配- Black
”有更多需求,而您想要
字符串的所有出現
- Black
僅當其基礎句子不包含Ink
或Cartridge
時才為- Black
,並且僅當- Black
在句子的末尾而不是- black
(小寫)
現在,如果您只想了解我所公開的內容,則可以同時將所有句子與所需的句子匹配- Black
字符串。 實際上,這就是在正則表達式世界中進行capturing
目的。 放在正則表達式中的括號(
和)
實際上可以“抓住/獲取/捕獲”其中的內容,並將其存儲在變量中以備后用。
這意味着 :
/hello (world)/
會hello world
而只能捕捉world
。 此捕獲進入名為group
的變量中,這里我只有一個組,因此world
將存儲在組號1
。
為了將此組呼叫其他目的(存儲/刪除/替換),您需要寫一個美元符號$
后跟所需組的編號(此處為1
)。 對於此示例, $1
應該輸出world
。 因此,這是您在捕捉另一個內容時可以匹配的方式。
因此,回到您的示例。 我建議您做以下事情:
/^(?!(?:.*(?:Ink|Cartridge).*))(?:.*(?: (- Black)$))/gm
查看此regex101 ,打開示例下方的substitution
選項卡,然后嘗試編寫$1
:在這里,
只是
- Black
。
然后由您決定使用$1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.