如何编写与子字符串不匹配并以字符串结尾的正则表达式?

问题描述 投票:0回答:1

我想编写规则(在Webpack中使用),该规则应与在任何地方都不包含子字符串xeditor且以.css结尾的字符串匹配。如果子字符串xeditor出现在字符串中的任何位置,则应将其丢弃(即不匹配)。

我到目前为止想出了:

(?!.*xeditor.).*css?$

我在https://www.regextester.com/中进行了测试,但仍可以像这样在字符串上进行匹配:

globalsite/xeditor/styles.css

[显示globalsite/x之后的所有内容,即editor/styles.css是匹配项。因为它在字符串中包含xeditor,所以我不想让它匹配。

我该怎么做?

regex webpack regex-negation
1个回答
0
投票

要匹配以特定模式结尾但不包含其他模式的字符串,可以使用如下正则表达式

^(?!.*pattern1).*pattern2$

否定的超前模式必须在开始处锚定先行检查,否则,将在字符串中的每个位置检查表达式,(?!.*pattern1)可能与不在开始位置的位置匹配中间,并且右边没有pattern1,而它仍然可以在左边。

阅读有关"Lookarounds (Usually) Want to be Anchored" at rexegg.com的更多信息。

这里,您可以使用

^(?!.*xeditor).*\.css$

请参见regex demo

请注意,.必须转义才能将其解析为文字点字符。

详细信息

  • [^-字符串开头
  • [(?!.*xeditor)-负前行,如果除换行符以外的其他0个以上的字符,则尽可能多然后xeditor],则匹配失败。
  • [.*-0+个除换行符以外的字符,尽可能多]
  • \.css$-字符串末尾的.css子字符串。
© www.soinside.com 2019 - 2024. All rights reserved.