Javascript 根据特定字符获取整个字符串或子字符串
我有一个包含MIME类型的字符串,比如Javascript 根据特定字符获取整个字符串或子字符串,javascript,regex,node.js,string-comparison,Javascript,Regex,Node.js,String Comparison,我有一个包含MIME类型的字符串,比如application/json。现在,我想将其与实际的HTTP头进行比较,在本例中为内容类型 如果标头包含MIME类型,那么它很容易: if (mimeType === contentType) { ... } 不幸的是,标题可能包含其他参数。它们总是跟在我感兴趣的值后面,它们之间用一个隔开。例如,它可以是application/json;字符集=UTF-8 所以现在基本上我需要运行: if (mimeType === contentType.subst
application/json
。现在,我想将其与实际的HTTP头进行比较,在本例中为内容类型
如果标头包含MIME类型,那么它很容易:
if (mimeType === contentType) { ... }
不幸的是,标题可能包含其他参数。它们总是跟在我感兴趣的值后面,它们之间用一个隔开代码>。例如,它可以是application/json;字符集=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)) { ...}
但这也将成功地匹配值应用程序/jsonformatter
(这是不需要的)
因此,长话短说:有没有比我上面描述的冗长的if
更好的方法来比较这些值,例如使用正则表达式
基本上,我在考虑一个表达式,根据以下规则在必要时缩短标题:
- 如果它包含分号,则返回它前面的部分
- 如果不包含分号,则返回所有内容
写这篇文章最有效的方法是什么?您可以使用正则表达式匹配:
if ( mimeType.match(/^application\/json(?= *;|$)/i) ) {
// matched
}
这里的(?=*;|$)
是正向的前瞻,它将确保搜索的字符串application/json
后跟可选空格和
或者它是输入中唯一的字符串。我建议使用标准解析模块,如media typer
,Express在其中间件中使用
var typer = require('media-typer');
var obj = typer.parse(contentType);
if (obj.type === 'application' && obj.subtype === 'json'){
// Success
}
该类型将以空格、行尾或空格结尾;感谢您指出:-)RFC允许在类型末尾和第一个之间使用OWS代码>例如app/foo;k=v
实际上,我本来想找一个这样的模块,但没能找到。谢谢你的提示:-)