[英]regex: Matching a javascript mime type in content-type http header
[英]Matching charset of HTTP Header Content-Type
在JavaScript中,我想获取HTTP标头字段名称“ Content-Type”的“ charset”属性
到目前为止,我所见过的Regex类似于:
var charset = (/^charset=(.+)/im).exec(ContentType)[1];
与ContentType一起包含Content-Type HTTP标头的信息。
但在我的测试中,匹配结果为“空”
编辑:跟随对@andris leduskrasts的回复,我这样做
var ctype = 'text/html; charset=utf-8';
var charset = new RegExp('charset=.*?(?=$|\s|\;|\")').exec(ctype);
system.stdout.writeLine(charset);
我得到'charset = utf-8'。 但是有些想法只能得到'utf-8'。 ?
如果您满意“ charset=
”部分作为结果的一部分,则可以这样做:
charset=.*?(?=\\s|\\;|\\|$")
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
导致charset=ISO-8859-1
。
如果您想摆脱正则表达式中已经存在的“ charset=
”部分,这会有些棘手,因为javascript不支持lookbehinds。
编辑:
如果只需要UTF-8部分,则只要变量始终是内容类型,因此很容易做到,因此,它以实际字符集结尾。 在这种情况下: [^\\s\\;\\=]*?(?=$)
; 这实际上只是选择字符串的最后一个单词,在空格,分号和a =
。 这绝对不是一个在随机字符串中查找字符集的好方法,但是对于您的特定情况它可能会成功。
这个Javascript库,做好了!
content-type :根据RFC 7231创建和解析HTTP Content-Type标头
var contentType = require('content-type')
var obj = contentType.parse('image/svg+xml; charset=utf-8')
解析内容类型字符串。 这将返回具有以下属性的对象(示例显示了字符串' image/svg+xml; charset=utf-8
'):
type
:媒体类型(类型和子类型,始终为小写)。 示例:“ image / svg + xml” parameters
:媒体类型中parameters
的对象(参数名称始终为小写)。 范例: {charset: 'utf-8'}
如果字符串丢失或无效,则引发TypeError
。
我只是遇到了同样的问题。
如果您只需要从任意内容类型标头中提取字符集值(根据rfc1341允许在字符集赋值后输入字符),则可以使用以下JS regexp:
var re = /charset=([^()<>@,;:\"/[\]?.=\s]*)/i;
之所以可行,是因为匹配的组从=
之后开始,并且排除了链接中给定的字符集规范的可能结尾; 即()<>@,;:\\"/[]?.=
,空格和(隐式)字符串结尾。
由于字符集是可选的,因此您可以使用以下内容设置适当的值:
var charset = re.test(ctype) ? re.exec(ctype)[1] : 'utf8';
或其他一些默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.