2014-12-19 71 views
1

我試圖從JavaScript和正則表達式的netscape格式cookie文件中提取cookie。使用正則表達式在php和python中工作,但由於某種原因,它不適用於JavaScript。它不返回任何匹配。當代替[\ 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

的問題是,你不能在你的正則表達式的字符串逃脫你的反斜線。另一種方法是使用正則表達式語法:據我可以告訴

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

同樣在一個不相關的音符,你將match作爲一個全球性的。所以你可能想在while循環之前添加var match;

+0

是的,謝謝:) – Evan