【问题标题】:Regex returns string undefined正则表达式返回未定义的字符串
【发布时间】:2015-02-07 11:08:34
【问题描述】:

我正在尝试从磁力链接中提取哈希值,但它返回 undefined

var tesst = "magnet:?xt=urn:btih:2B78EDFDDC87DC9605FB285997A80B787888C194&"
var test = tesst.match(/magnet:\?xt=urn:btih:[a-z\d]{40}\&/im);
alert (test[1]);

我不明白我做错了什么。

【问题讨论】:

  • 您在正则表达式中没有任何捕获组。使用test[0] 打印整个匹配项
  • test[0] 而不是 test[1]... 因为没有捕获组。
  • test[0] 打印整个字符串,即 tesst
  • @user3452098 这就是我们要问的。您特别想要哪个值?
  • 我想要2B78EDFDDC87DC9605FB285997A80B787888C194

标签: javascript regex string-matching


【解决方案1】:
var test = tesst.match(/magnet:\?xt=urn:btih:([a-z\d]{40})\&/im);

您忘记了散列部分周围的 ( )。

【讨论】:

    【解决方案2】:

    只需使用捕获组标记您想要的内容:

    /^magnet:\?xt=urn:btih:([a-z\d]{40})\&$/im
    

    我也建议不要在这里使用正则表达式。
    尝试跟随:

    tesst.split(':')[3].slice(0, -1);
    

    slice(0, -1) 用于删除最后一个'&',您可以使用任何其他方法,如slice(0, 40)replace(/[^\w]/g, '') 或任何其他方法。

    【讨论】:

    • regex 还可以帮助我提取哈希,但前提是它是一个磁力链接,无论如何感谢您的帮助。
    【解决方案3】:

    您需要在捕获组中包含 [a-z\d]{40} 部分,并且您不需要转义 & 符号,因为它不是正则表达式元字符。

    > var test = tesst.match(/magnet:\?xt=urn:btih:([a-z\d]{40})&/im);
    undefined
    > console.log(test[1])
    2B78EDFDDC87DC9605FB285997A80B787888C194
    

    【讨论】:

      【解决方案4】:

      你可以使用这个正则表达式

      /([^:]+)&$/
      

      并使用test[1]

      console.log(str.match(/([^:]+)&$/)[1]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-13
        • 2018-07-23
        • 2013-11-04
        • 1970-01-01
        • 2012-03-11
        • 1970-01-01
        • 2010-09-21
        相关资源
        最近更新 更多