簡體   English   中英

正則表達式:僅當另一個單詞不存在時匹配單詞

[英]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僅當其基礎句子不包含InkCartridge時才為- 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.

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