正则表达式匹配任何不以.json结尾的内容

时间:2014-02-23 00:00:01

标签: javascript regex express

对于一个网络应用程序,我正在尝试提供一个javascript正则表达式,匹配任何不以.json结尾的内容。听起来很简单,但我发现它非常难受。

我首先想要这样做:^.*(?!\.json$),但这显然不起作用,因为它只是匹配整个字符串。然后我尝试^[^\.]*(?!\.json$)但匹配ab中的abc.json

我已经提出了两个正在执行此工作的正则表达式,但我希望有一个可以执行此操作的正则表达式。

// Match anything that has a dot but does not end in .json
^.*\.(?!json$)
// Match anything that doesn't have a dot
^[^\.]*$

我喜欢http://regex101.com/#javascript来测试它们。

我在app.get(REGEXP, routes.index)中使用regexp作为ExpressJS路由定义的一部分。

4 个答案:

答案 0 :(得分:7)

尝试/^(?!.*\.json$).*$/

/^(?!.*\.json$).*$/.test("foo.json")
false
/^(?!.*\.json$).*$/.test("foo")
true
/^(?!.*\.json$).*$/.test("foo.html")
true

答案 1 :(得分:1)

您可以随时获取文件扩展名,然后进行比较。

正则表达式找到文件扩展名

/\.[^.]*$/

使用

获取文件扩展名
var extension = /\.[^.]*$/.exec("something.json");

if(extension[0] === ".json"){
    //do something
}

答案 2 :(得分:0)

也许不是测试“匹配(不是.json)”而是可以测试“不匹配(.json)”,这很容易吗?

答案 3 :(得分:0)

我会创建一个匹配.json的正则表达式然后当你检查它时用

反转逻辑
  

匹配== false

这会更简单,它会显示您正在尝试做的事情,使其对其他程序员来说更加明显。