正则表达式匹配不以test.js结尾但以.js结尾的文件

时间:2012-05-25 15:41:56

标签: ruby regex regex-negation

以下是要匹配的示例字符串列表:

  • 这些应匹配:

    hello.js
    test.hello.js
    test.js.js
    test.js.hello.js
    test.js.test.js.test.js.dss.js
    test.js.dss.js
    test.js.js.js.js.dummy.js
    
  • 不应匹配:

    fun.css
    test.js
    fun.test.js
    test.test.js
    test.js.test.js
    hell.cs
    test.test.js
    

2 个答案:

答案 0 :(得分:3)

一个简单的选择是使用否定前瞻来检查该行不以.test.js结尾:

^(?!.*\.test\.js$).*\.js$

该版本不包含test.js,这是一种特殊情况,但您可以使用^(?!(?:^|.*\.)test\.js$).*\.js$来解决它(或其他类似选项)。

工作示例:http://www.rubular.com/r/UVvRZMcnjl

如果你的风味支持lookbehinds(JavaScript和旧Ruby不支持,但Ruby 1.9.2支持),你可以使用:

^.*(?<!^test|\.test)\.js$

工作示例:http://www.rubular.com/r/lBCphNYEeS

答案 1 :(得分:2)

由于问题代码已从更改为,请使用简单的lookbehind:

.*(?<!test).js$

在此处查看:[{3}}