匹配HTTP标头内容类型的字符集

时间:2015-06-13 09:24:03

标签: javascript regex

在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'。 ?

3 个答案:

答案 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';

或其他一些默认值。