【问题标题】:Parsing regex in javascript [duplicate]在javascript中解析正则表达式[重复]
【发布时间】:2014-12-02 04:55:30
【问题描述】:

我无法解析正则表达式。我已经从 regexpal.com 和 regex101.com 对其进行了测试(通过将表达式设置为 "(?:^csrf-token|;\s*csrf-token)=(.*?)(?:;|$)" 并将测试字符串设置为“__ngDebug=false; csrf-token=b2ssOJ4jNOlPdmXAHn4CORPvFoO4Ngsupej25tdj”)。

示例是jsfiddle

function getCookie(name) {
			
    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')。

【问题讨论】:

  • 您能否更清楚地了解您的预期输出是什么?另外,当你说你不能“解析一个正则表达式”时,你的意思是你不能创建一个你想要的正则表达式吗?
  • 如果您从字符串创建正则表达式,您需要转义字符串中的任何反斜杠。所以"\\s" 不是"\s"

标签: javascript regex


【解决方案1】:

改变

"|;\s*"

"|;\\s*"
    ^

问题是,你是通过构造函数传入一个字符串来构造正则表达式的,所以你需要遵循字符串文字转义的规则。在 JavaScript 中,"\s" 被识别为单个字符串,带有小写的s。要指定\,您需要对其进行转义。

【讨论】:

    【解决方案2】:

    你应该转义\s

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2012-11-21
      • 2014-10-28
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多