正则表达式返回字符串undefined

时间:2014-12-09 14:12:13

标签: javascript regex string-matching

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

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

我无法理解我做错了什么。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

此外,我建议不要在这里使用正则表达式 尝试遵循:

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以使用此正则表达式

/([^:]+)&$/

并使用test[1]

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