正则表达式与spec.ts和spec.tsx不匹配,但应匹配任何其他.ts和.tsx

时间:2016-07-20 05:34:41

标签: regex regex-negation

我写的这个正则表达式匹配任何.ts或.tsx文件名,但不应该与spec.tsx或spec.ts匹配。下面是我写的正则表达式。

(?!spec)\.(ts|tsx)$

但它无法忽略.spec.tsx和spec.ts文件。我在这做错了什么?请指教。

1 个答案:

答案 0 :(得分:3)

负前瞻语法((?!...))从正则表达式中的任何位置看提前。因此,您的(?!spec)正在与\.之前的那一点进行比较。换句话说,它与文件扩展名.ts.tsx进行比较。否定前瞻不匹配,因此整个字符串不会作为匹配被拒绝。

你想要一个负面的 lookbehind 正则表达式:

(?<!spec)\.(ts|tsx)$

这里是demo(请参阅&#34;单元测试&#34;屏幕左侧的链接)。

以上假设你的正则表达式支持消极的外观;并非所有正则表达式都有。如果您碰巧使用的是不支持负面外观的正则表达式,那么您可以使用更复杂的负向前瞻:

^(?!.*spec\.tsx?$).*\.tsx?$

这实际上说,&#34;从头开始,确保字符串不会以spec.tsspec.tsx结尾。如果它没有结束,那么匹配,如果它在.ts.tsx&#34;

结束

Demo