正则表达式:仅当另一个单词不存在时匹配单词

时间:2017-11-15 21:40:37

标签: javascript regex regex-lookarounds

我有Regex

/^(?!(.*(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正则表达式。

任何想法?

1 个答案:

答案 0 :(得分:0)

如果您只需匹配“-Black”这个词,那么正确的正则表达式将是:

/- Black/

上面的正则表达式只是匹配问题所要求的- Black

然而,确实你有比“匹配- Black”更多的需求,而不是你想要的

  

字符串- Black的所有匹配项仅在其基础句子不包含InkCartridge时,且仅当- Black位于句子末尾且不- black(小写)

现在,如果你只是想要我暴露的内容,那么将所有句子与所需的- Black字符串同时匹配并不是一个问题。事实上,这就是capturing在正则表达式世界中的含义。您放入正则表达式中的括号()实际上“抓取/获取/捕获”它中的内容并将其存储在变量中供以后使用。

这意味着:

/hello (world)/

将匹配hello world但仅限world。此捕获进入名为group的变量,此处我只有一个组,因此world将存储在组号1中。

为了将此组用于其他目的(存储/删除/替换),您需要写一个美元符号$,后跟所需组的编号(此处为1)。对于此示例,$1应输出world。所以这就是你如何在捕获另一个东西时匹配的东西。

因此,回到你的榜样。我建议你这样做:

/^(?!(?:.*(?:Ink|Cartridge).*))(?:.*(?: (- Black)$))/gm

请看这个regex101,打开示例下方的substitution标签,然后尝试撰写$1:你有它,

  

只是- Black

然后由你$1做点什么。