我正在尝试使用JavaScript和regex从netscape格式的cookie文件中提取cookie。使用的正则表达式适用于php和python但由于某种原因它不适用于JavaScript。它不返回任何匹配项。当我使用[^ \ s]而不是[\ S]时,它会给出匹配但它会删除字符' s,这不是最佳的...... 无论如何这是代码和测试字符串,让我知道它是否显而易见。
function readCookies(){
fs.readFile(myArgs[0], 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
console.log(data);
var rx = new RegExp("(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S+)", "g");
var matches = new Array();
var name = true;
while((match = rx.exec(data)) !== null){
console.log(String(match[1]).trim())
}
});
}
测试字符串:
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
sffd.com FALSE / FALSE 1418953710 proimg 709c76
sffd.com FALSE / FALSE 1418953710 proimg1 709c76
.sffd.com FALSE / FALSE 1418953710 proimg2 709c76
答案 0 :(得分:0)
问题是您没有在RegExp字符串中转义反斜杠。另一种方法是使用RegExp文字语法:
var rx = /(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S+)/g;
另据一个不相关的说明,据我所知,你将match
作为全球介绍。因此,您可能希望在while循环之前添加var match;
。