【问题标题】:JavaScript Regex Lookahead for .spec Files.spec 文件的 JavaScript 正则表达式前瞻
【发布时间】:2016-07-24 17:46:22
【问题描述】:

我想省略 .spec.js 文件并仅删除 .js 文件。我有这个,但它不工作:

(?!.*\.spec\.js$)*.js')

有什么建议吗?

【问题讨论】:

  • "spec" 足够短,您可以执行/[^s][^p][^e][^c]\.js/ 之类的操作,但更简单的是 2 次传递结果:找到所有“.js”,然后使用“spec.js”过滤掉任何结果。 js"
  • 使用 Node.js?能否添加完整的代码

标签: javascript regex lookahead


【解决方案1】:

您可以使用positive lookahead 来查看.spec 是否在.js 之前出现并相应地过滤掉它。此正则表达式将仅匹配 .exec.js 文件。

正则表达式: .*?(?=\.spec).*?\.js

说明:

  • .*? 匹配文件名。

  • 如果有.spec 存在,(?=\.spec) 将消极地向后看。如果是,则整个匹配将被丢弃。

  • .*?\.js 匹配文件名的其余部分和末尾的 .js 扩展名。

Regex101 Demo


或者不使用lookahead

正则表达式: .*?(\.spec).js

说明:

  • .*? 匹配初始文件名。

  • (\.spec) 匹配 .spec(如果存在)。

  • .js 分机号。

Regex101 Demo

【讨论】:

  • @PoulBak:谢谢你提醒我。我完全错过了这个事实。现在会改变它。 P.S:使用积极的前瞻性更新了我的答案。
  • 星号后的那些问号不会在 javascript 正则表达式中添加任何值。
  • @JonAnderson:我想你在这种情况下是对的。我将它们添加到更安全的一面,以仅匹配想要的部分而不是贪婪。
【解决方案2】:

我不认为这是可以获取所有 *.js 文件的同时在单个正则表达式中省略 *.spec.js 文件而无需后视。或者,您可以只使用两个对 endsWith() 的调用:

filename.endsWith('.js') && !filename.endsWith('.spec.js')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多