Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配HTTP标头内容类型的字符集_Javascript_Regex - Fatal编程技术网

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

Javascript 匹配HTTP标头内容类型的字符集,javascript,regex,Javascript,Regex,在JavaScript中,我想获取HTTP头字段名“Content Type”的“charset”属性 到目前为止,我看到的正则表达式是: var charset = (/^charset=(.+)/im).exec(ContentType)[1]; var charset = re.test(ctype) ? re.exec(ctype)[1] : 'utf8'; 与ContentType一起包含内容类型HTTP标头的信息 但在我的测试中,匹配的结果是“null” 编辑:跟随@andris

在JavaScript中,我想获取HTTP头字段名“Content Type”的“charset”属性

到目前为止,我看到的正则表达式是:

var charset = (/^charset=(.+)/im).exec(ContentType)[1];
var charset = re.test(ctype) ? re.exec(ctype)[1] : 'utf8';
与ContentType一起包含内容类型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’。但是一些想法只得到“utf-8”

如果您认为“
charset=
”部分是结果的一部分,则可以:

charset=.*?(?=\s | \ | \ | \$)

导致
charset=ISO-8859-1

如果您想去掉regex中已经存在的“
charset=
”部分,那么就有点棘手了,因为javascript不支持lookbehind

编辑:


如果您只需要UTF-8部分,那么如果您的变量始终是内容类型,并且因此以实际的字符集结尾,则很容易实现。在本例中:
[^\s\;\=]*?(?=$)
;它实际上只选择字符串的最后一个单词,在空格、分号和
=
之后。这绝对不是在随机字符串中查找字符集的好方法,但它可能会对您的特定情况起作用。

这个Javascript库,完成这项工作

:根据RFC 7231创建和解析HTTP内容类型标头

var contentType = require('content-type')
var obj = contentType.parse('image/svg+xml; charset=utf-8')
解析内容类型字符串。这将返回具有以下属性的对象(显示字符串“
image/svg+xml;charset=utf-8
”的示例):

  • 类型
    :媒体类型(类型和子类型,总是小写)。 示例:“image/svg+xml”
  • 参数
    :媒体类型中参数的对象(名称) 参数总是小写)。示例:
    {charset:'utf-8'}

如果字符串丢失或无效,则抛出一个
TypeError

我刚刚遇到了同样的问题

如果需要从任意内容类型头中仅提取字符集值(允许按照指定字符集后的字符),可以使用以下JS regexp:

var re = /charset=([^()<>@,;:\"/[\]?.=\s]*)/i;

或者其他一些默认设置。

您正在使用的字符串是什么样子的?对于http的字符集,请查看此页面@andris leduskrasts,字符串看起来像这样的text/html;charset=utf-8或charset=utf-8;text/html或charset=utf-8。确定。我更新了我的帖子以添加$。但是可以获得“utf-8”?是的,它总是http的内容类型查看编辑,它可能适用于您的情况,尽管它不再与查找实际字符集有关。