在JavaScript中,我想得到" charset" HTTP标题字段名称的属性'内容类型'
到目前为止我见过的正则表达式是这样的:
var charset = (/^charset=(.+)/im).exec(ContentType)[1];
ContentType 包含Content-Type HTTP标头的信息。
但在我的测试中,匹配的结果是' null'
编辑:按照@andris leduskrasts的回复,我这样做
var ctype = 'text/html; charset=utf-8';
var charset = new RegExp('charset=.*?(?=$|\s|\;|\")').exec(ctype);
system.stdout.writeLine(charset);
我得到' charset = utf-8'。但有些想法只能获得&utff-8'。 ?
答案 0 :(得分:1)
如果您将“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\;\=]*?(?=$)
;它实际上只是在空格,分号和=
之后选择字符串的最后一个单词。对于在随机字符串中查找字符集来说,这绝不是一个很好的解决方案,但它可能适用于您的特定情况。
答案 1 :(得分:1)
这个Javascript库,做好了工作!
content-type:根据RFC 7231
创建和解析HTTP Content-Type标头var contentType = require('content-type')
var obj = contentType.parse('image/svg+xml; charset=utf-8')
解析内容类型字符串。这将返回具有以下属性的对象(示例显示字符串&#39; image/svg+xml; charset=utf-8
&#39;):
type
:媒体类型(类型和子类型,总是小写)。
示例:&#39; image / svg + xml&#39; parameters
:媒体类型中参数的对象(名称为
参数总是小写)。示例:{charset: 'utf-8'}
如果字符串丢失或无效,则抛出TypeError
。
答案 2 :(得分:1)
我刚遇到同样的问题。
如果只需要从任意内容类型标头中提取charset值(根据rfc1341允许在字符集赋值后允许字符),则可以使用以下JS regexp:
var re = /charset=([^()<>@,;:\"/[\]?.=\s]*)/i;
这是有效的,因为匹配的组在=
之后开始,并且排除了链接中给出的charset规范的可能结尾;即()<>@,;:\"/[]?.=
,空格和(隐含地)字符串结尾。
由于charset是可选的,您可以使用以下内容设置适当的值:
var charset = re.test(ctype) ? re.exec(ctype)[1] : 'utf8';
或其他一些默认值。