如何反转我的正则表达式的结果

How do I invert the results of my RegEx

我有以下正则表达式

.*\.(test|spec|es5|es6)\.(js|bundle\.js)

使用以下测试输入

bunle.spec.js
my.main.js
test.es6.js
te.es5.js
file.test.js
abc.js
ee.ff.abc.js
eeee.ffff.abc.js

https://regex101.com/r/8BZyA0/2

如何翻转我的 RegEx 条件,使其选择 my.main.jsabc.jsee.ff.abc.jseeee.ffff.abc.js 相反?

谢谢

您需要将您拥有的模式的第一部分转换为负前瞻并将其锚定在字符串的开头,并且 - 根据评论中的反馈 - 您需要字符串以 .js.bundle.js - 在末尾添加 $ 锚点:

 ^(?!.*\.(?:test|spec|es[56])\.(?:(?:bundle\.)?js$)).*\.(?:bu‌​ndle\.)?js$

参见regex demo

详情:

  • ^ - 字符串的开头
  • (?!.*\.(?:test|spec|es[56])\.(?:(?:bundle\.)?js$)) - 如果 在除换行字符之外的 0+ 个字符后 (由于 .*)一个字符串,则否定前瞻将失败包含 .,然后是 testspeces5es6,然后是 .,然后是 jsbundle.js 在字符串的末尾 ($)
  • .* - 除换行符以外的 0+ 个字符
  • \. - 一个点
  • (?:bu‌​ndle\.)? - 可选的非捕获组匹配 bundle. 子串
  • 的 1 次或 0 次出现
  • js - 文字子字符串 js
  • $ - 在字符串的末尾。