我有一个包含MIME类型的字符串,比如application/json
。现在我想将它与实际的HTTP标头进行比较,在本例中为content-type
。
如果标题包含MIME类型,那么它就像:
一样简单if (mimeType === contentType) { ... }
不幸的是,标题可能包含其他参数。他们总是追随我感兴趣的价值,并通过;
与它分开。例如,它可以是application/json; charset=UTF-8
。
所以现在基本上我需要运行:
if (mimeType === contentType.substring(0, contentType.indexOf(';'))) { ... }
问题是第一种情况仍然可能发生,所以现在我们有:
if (mimeType === contentType ||
mimeType === contentType.substring(0, contentType.indexOf(';'))) { ... }
事情开始变得冗长......
我可以考虑使用
比较它们if (mimeType === contentType.substring(0, mimeType.length)) { ...}
但这也会成功匹配值application/jsonformatter
(这是不可取的)。
所以,长话短说:有没有比上面描述的冗长if
更好的方法来比较这些值,例如:使用正则表达式?
基本上我正在考虑根据以下规则在必要时缩短标题的表达式:
最有效的写作方式是什么?
答案 0 :(得分:2)
您可以使用正则表达式匹配:
if ( mimeType.match(/^application\/json(?= *;|$)/i) ) {
// matched
}
这里(?= *;|$)
是正面的预测,它将确保搜索的字符串application/json
后跟可选空格和;
或者它是输入中唯一的字符串。
答案 1 :(得分:1)
我建议使用像media-typer
这样的标准解析模块,Express在其中间件中使用。
var typer = require('media-typer');
var obj = typer.parse(contentType);
if (obj.type === 'application' && obj.subtype === 'json'){
// Success
}