Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与任何不以.json结尾的内容匹配的正则表达式_Javascript_Regex_Express - Fatal编程技术网

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

Javascript 与任何不以.json结尾的内容匹配的正则表达式,javascript,regex,express,Javascript,Regex,Express,对于一个web应用程序,我试图找到一个javascript正则表达式来匹配任何不以.json结尾的东西。听起来很简单,但我觉得很难 我第一次想这样做:^.*(!\.json$),但这显然不起作用,因为它只是匹配整个字符串。然后我尝试了^[^\.]*(?!\.json$),但这与abc.json中的ab匹配 我已经想出了两个正则表达式来完成这项工作,但我想有一个正则表达式可以完成这项工作 // Match anything that has a dot but does not end in .j

对于一个web应用程序,我试图找到一个javascript正则表达式来匹配任何不以
.json
结尾的东西。听起来很简单,但我觉得很难

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

我已经想出了两个正则表达式来完成这项工作,但我想有一个正则表达式可以完成这项工作

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

我在
app.get(regexp,routes.index)
中使用regexp作为ExpressJS路由定义的一部分,请尝试
/^(?。.*\.json$).$/

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

也许可以测试“not match(.json)”,而不是测试“match(not.json)”,这很简单?

我将创建一个正则表达式来匹配.json,然后在检查它时,使用

匹配==错误


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

您总是可以获取文件扩展名,然后进行比较

要查找文件扩展名,请使用正则表达式

/\..[^.]*$/

/^(?!.*\.json$).*$/.test("foo.json")
false
/^(?!.*\.json$).*$/.test("foo")
true
/^(?!.*\.json$).*$/.test("foo.html")
true
使用获取文件扩展名

var extension = /\.[^.]*$/.exec("something.json");

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

我不知道为什么会被否决,但这是一个非常合理的解决方案。这不是严格意义上的正则表达式,但它是有效的。除非他们的问题只是他们需要的更大正则表达式的一部分——例如,他们可能需要匹配文件名的部分以便以后提取;如果您只匹配它命中JSON,然后拒绝它,那么您不能将它们组合在一起。如果是负面展望,你可以。谢谢你的评论。不能太容易做到这一点,我正在使用Express.js,希望使用
app.get(REGEX,routes.index)syntax@TheFonz在其他两个答案中,你仍然应该考虑另一个选项。关于代码可读性的观点非常正确。很好。优雅的解决方案。如果我不使用Express .js的代码> App.GET(ReEX,Real. index),当然会考虑。代码>语法。哦,这改变了一切。是的,我想我会选择这里的其他答案谢谢你的答案,如果我不想使用Express.js的
app.get(REGEX,routes.index),我会这么做
@TheFonz:如果我错了,请纠正我,但是您不能将扩展作为可选参数并测试它是否为“.json”吗?编辑:例如
/foo(\.\w+)?/
是的,但我不确定上面注释中的函数会如何工作。。。只使用正则表达式更容易。文件名也可以是任何内容。@TheFonz:使用我提供的确切regexp,您可以通过
req.params[0]
访问扩展名。如果还希望将文件名作为第一个参数(例如,
/([^.])(\.\w+?/
)捕获,则扩展名为
req.params[1]
。瞧。@bwukelic啊,我现在明白你的意思了。是的,那也很好。谢谢你的澄清。