匹配 *.ts 但不匹配 *.d.ts 的 Webpack 正则表达式测试

Webpack regex test that matches *.ts but not *.d.ts

我正在使用 Webpack (2.3.3) 在 TS 中构建我的 Aurelia 应用程序。但是,由于我正在为 AureliaPlugin (2.0.0-rc.2) 使用 includeAll 选项,ts-loader (2.0.3) 会抱怨 d.ts 没有任何输出的文件没有输出。

这是我对 ts 文件的规则:{ test: /\.ts$/, include: /ClientApp/, use: "ts-loader" }

我需要更改测试值,使其与名为 *.ts 的文件匹配,但 *.d.ts 除外。你能帮帮我吗?

注意:我看到已经有一个类似的正则表达式问题,但那个对我不起作用。

匹配末尾有 .ts 而不是 .d.ts 的字符串的正则表达式是

/(^.?|\.[^d]|[^.]d|[^.][^d])\.ts$/

看到一个regex demo。它是一个 POSIX 风格的表达式,适用于任何正则表达式引擎。

详情

  • (^.?|\.[^d]|[^.]d|[^.][^d]) - 以下任一项:
    • ^.? - 字符串开头 + 任何可选字符
    • \.[^d] - 一个点和除 d
    • 之外的任何字符
    • [^.]d - 除了 .d
    • 之外的任何字符
    • [^.][^d] - 除了 . 之外的任何字符,然后是 d 之外的任何字符(这样,我们匹配除 .d 之外的所有字符)
  • \. - 文字点
  • ts$ - ts 在字符串末尾。

或者,使用基于前瞻的解决方案:

/^(?!.*\.d\.ts$).*\.ts$/

another demo

详情:

  • ^ - 字符串开头
  • (?!.*\.d\.ts$) - 字符串不能以 .d.ts
  • 结尾
  • .* -
  • 之前的任何 0+ 个字符
  • \.ts$ - .ts 在字符串的末尾。

但是,您可以探索 this SO thread 中描述的另一个选项。