对于一个网络应用程序,我正在尝试提供一个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路由定义的一部分。
答案 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
这会更简单,它会显示您正在尝试做的事情,使其对其他程序员来说更加明显。