Regex 不使用';t匹配spec.ts和spec.tsx,但应匹配任何其他.ts和.tsx

Regex 不使用';t匹配spec.ts和spec.tsx,但应匹配任何其他.ts和.tsx,regex,regex-negation,Regex,Regex Negation,我编写的这个正则表达式匹配任何.ts或.tsx文件名,但不应该匹配spec.tsx或spec.ts。下面是我写的正则表达式 (?!spec)\.(ts|tsx)$ 但它无法忽略.spec.tsx和spec.ts文件。我做错了什么?请注意。负先行语法((?!…))从正则表达式中的任何位置向前看。因此,您的(?!spec)正在与该点之后的内容进行比较,就在\.之前。换句话说,它将与文件扩展名.ts或.tsx进行比较。负前瞻不匹配,因此不会将整个字符串作为匹配项拒绝 您想要一个负lookbehind

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

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

但它无法忽略.spec.tsx和spec.ts文件。我做错了什么?请注意。

负先行语法(
(?!…)
)从正则表达式中的任何位置向前看。因此,您的
(?!spec)
正在与该点之后的内容进行比较,就在
\.
之前。换句话说,它将与文件扩展名
.ts
.tsx
进行比较。负前瞻不匹配,因此不会将整个字符串作为匹配项拒绝

您想要一个负lookbehind正则表达式:

这实际上是说,“从开头开始,确保字符串不以
spec.ts
spec.tsx
结尾。如果它不以该结尾,则匹配它是否以
.ts
.tsx
结尾。”


负先行语法(
(?!…)
)从正则表达式中的任何位置向前看。因此,您的
(?!spec)
正在与该点之后的内容进行比较,就在
\.
之前。换句话说,它将与文件扩展名
.ts
.tsx
进行比较。负前瞻不匹配,因此不会将整个字符串作为匹配项拒绝

您想要一个负lookbehind正则表达式:

这实际上是说,“从开头开始,确保字符串不以
spec.ts
spec.tsx
结尾。如果它不以该结尾,则匹配它是否以
.ts
.tsx
结尾。”


什么是regex口味?什么是regex口味?
(?<!spec)\.(ts|tsx)$
^(?!.*spec\.tsx?$).*\.tsx?$