2014-12-02 118 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"); 
               ^