我想编写规则(在Webpack中使用),该规则应与在任何地方都不包含子字符串xeditor
且以.css
结尾的字符串匹配。如果子字符串xeditor
出现在字符串中的任何位置,则应将其丢弃(即不匹配)。
我到目前为止想出了:
(?!.*xeditor.).*css?$
我在https://www.regextester.com/中进行了测试,但仍可以像这样在字符串上进行匹配:
globalsite/xeditor/styles.css
[显示globalsite/x
之后的所有内容,即editor/styles.css
是匹配项。因为它在字符串中包含xeditor
,所以我不想让它匹配。
我该怎么做?
要匹配以特定模式结尾但不包含其他模式的字符串,可以使用如下正则表达式
^(?!.*pattern1).*pattern2$
否定的超前模式必须在开始处锚定先行检查,否则,将在字符串中的每个位置检查表达式,(?!.*pattern1)
可能与不在开始位置的位置匹配中间,并且右边没有pattern1
,而它仍然可以在左边。
阅读有关"Lookarounds (Usually) Want to be Anchored" at rexegg.com的更多信息。
这里,您可以使用
^(?!.*xeditor).*\.css$
请参见regex demo。
请注意,.
必须转义才能将其解析为文字点字符。
详细信息
^
-字符串开头(?!.*xeditor)
-负前行,如果除换行符以外的其他0个以上的字符,则尽可能多然后xeditor
],则匹配失败。.*
-0+个除换行符以外的字符,尽可能多]\.css$
-字符串末尾的.css
子字符串。