Javascript 匹配HTTP标头内容类型的字符集
在JavaScript中,我想获取HTTP头字段名“Content Type”的“charset”属性 到目前为止,我看到的正则表达式是: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
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的内容类型查看编辑,它可能适用于您的情况,尽管它不再与查找实际字符集有关。