2014-12-02 105 views
-1

我無法解析正則表達式。我已經從regexpal.com和regex101.com(通過將表達式設置爲"(?:^csrf-token|;\s*csrf-token)=(.*?)(?:;|$)"並將測試字符串設置爲「__ngDebug = false; csrf-token = b2ssOJ4jNOlPdmXAHn4CORPvFoO4Ngsupej25tdj」)對其進行了測試。解析javascript中的正則表達式

該示例爲jsfiddle

function getCookie(name) { 
 
\t \t \t 
 
    var s = "__ngDebug=false; csrf-token=b2ssOJ4jNOlPdmXAHn4CORPvFoO4Ngsupej25tdj"; 
 
    
 
    var regexp = new RegExp("(?:^" + name + "|;\s*"+ name + ")=(.*?)(?:;|$)", "g"); 
 
    var result = regexp.exec(s); 
 
    return (result === null) ? null : result[1]; 
 
} 
 
alert(getCookie("csrf-token"));

然而,如果s"csrf-token=b2ssOJ4jNOlPdmXAHn4CORPvFoO4Ngsupej25tdj",然後正常工作。請告訴我什麼是錯的。

期望的輸出是"b2ssOJ4jNOlPdmXAHn4CORPvFoO4Ngsupej25tdj",並且沒有輸入(要測試的字符串是's')。

+0

能否請你有點更清晰的瞭解你的期望的輸出是什麼?另外,當你說你不能「解析一個正則表達式」時,你的意思是說你不能創建一個正則表達式來達到你想要的效果? – nnnnnn 2014-12-02 04:57:50

+0

@nnnnnn已更新 – 2014-12-02 04:59:42

+0

如果您從字符串創建正則表達式,則需要轉義字符串中的任何反斜槓。所以''\\ s「'不是'」\ s「'。 – nnnnnn 2014-12-02 05:02:19

回答

2

變化

"|;\s*" 

"|;\\s*" 
    ^

的事情是,你是通過構造一個字符串傳遞構造正則表達式,所以你需要按照字符串字面逃逸的規則。在JavaScript中,"\s"被識別爲單個字符串,小寫字母s。要指定\,您需要將其轉義。

2

你應該逃避\s

var regexp = new RegExp("(?:^" + "csrf-token" + "|;\\s*"+ "csrf-token" + ")=(.*?)(?:;|$)", "g"); 
               ^