2014-12-09 2 views
-2

Я пытаюсь извлечь хэш-значение из ссылки магнита, но она возвращает неопределенногоRegex возвращает строку неопределенной

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

Я не могу понять, что я делаю неправильно.

+1

Вы не имеете каких-либо групп захвата в регулярных выражениях. Используйте 'test [0]' для печати всего соответствия – nu11p01n73R

+0

put 'test [0]' вместо 'test [1]' ... потому что нет группы захвата. –

+0

'test [0]' печатает целую строку i.e 'tesst' значение – user3452098

ответ

0

просто отметьте, что вы хотите с захватывая группы:

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

Также я рекомендую не использовать регулярное выражение здесь.
Try последовало:

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

slice(0, -1) используется для Вытащите последнего '&', вы можете использовать любой другой метод, как slice(0, 40), replace(/[^\w]/g, '') или любой другой.

+0

regex также помогает мне извлечь хэш только в том случае, если его магнитная связь в любом случае поможет вам. – user3452098

0

В группе захвата вам необходимо включить [a-z\d]{40} часть, и вам не нужно выходить из символа &, потому что это не метасимвол регулярного выражения.

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

Вы забыли() вокруг хеш-части.

0

Вы можете использовать это регулярное выражение

/([^:]+)&$/ 

и использовать test[1]

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

Last '&' missed –

+0

@vp_arth ах! благодаря –

Смежные вопросы