我写的这个正则表达式匹配任何.ts或.tsx文件名,但不应该与spec.tsx或spec.ts匹配。下面是我写的正则表达式。
(?!spec)\.(ts|tsx)$
但它无法忽略.spec.tsx和spec.ts文件。我在这做错了什么?请指教。
答案 0 :(得分:3)
负前瞻语法((?!...)
)从正则表达式中的任何位置看提前。因此,您的(?!spec)
正在与\.
之前的那一点进行比较。换句话说,它与文件扩展名.ts
或.tsx
进行比较。否定前瞻不匹配,因此整个字符串不会作为匹配被拒绝。
你想要一个负面的 lookbehind 正则表达式:
(?<!spec)\.(ts|tsx)$
这里是demo(请参阅&#34;单元测试&#34;屏幕左侧的链接)。
以上假设你的正则表达式支持消极的外观;并非所有正则表达式都有。如果您碰巧使用的是不支持负面外观的正则表达式,那么您可以使用更复杂的负向前瞻:
^(?!.*spec\.tsx?$).*\.tsx?$
这实际上说,&#34;从头开始,确保字符串不会以spec.ts
或spec.tsx
结尾。如果它没有结束,那么匹配,如果它在.ts
或.tsx
&#34;