正则表达式匹配非空格字符

时间:2014-12-19 12:58:47

标签: javascript regex cookies

我正在尝试使用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

1 个答案:

答案 0 :(得分:0)

问题是您没有在RegExp字符串中转义反斜杠。另一种方法是使用RegExp文字语法:

var rx = /(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S*?)\t(\S+)/g;

另据一个不相关的说明,据我所知,你将match作为全球介绍。因此,您可能希望在while循环之前添加var match;