2017-02-19 5 views
2

Я пытаюсь получить некоторые данные с помощью Tampermonkey с помощью JavaScript. Проблема с регулярным выражением, я разработал его в RegExr (Air приложение), и это, кажется, работает хорошо на входном тексте:Tampermonkey - Не удается получить данные с помощью Regex

<div class="yt-lockup clearfix yt-lockup-video yt-lockup-grid vve-check" data-context-item-id="Rg2PUqmNWe4" data-visibility-tracking="abc"> 
    <div class="yt-lockup-dismissable"> 
     <div class="yt-lockup-thumbnail"> 
    <span class=" spf-link ux-thumb-wrap contains-addto"><a href="/watch?v=Rg2PUqmNWe4" class="yt-uix-sessionlink" aria-hidden="true" data-sessionlink="videos"> <span class="video-thumb yt-thumb yt-thumb-196"> 
<span class="yt-thumb-default"> 

Однако в коде он не показывает предупреждение:

var lis = document.getElementById("data").getElementsByTagName("li"); 
//alert(lis.length); 

var item = lis[0].innerHTML; 
alert(item.match(/(?<=data-context-item-id=").*?(?=")/g)); 

Как я могу вернуть строку «Rg2PUqmNWe4»?

ответ

2

Я думаю, что это хорошее решение для этой проблемы:

const data = `<div class="yt-lockup clearfix yt-lockup-video yt-lockup-grid vve-check" data-context-item-id="Rg2PUqmNWe4" data-visibility-tracking="abc"> 
 
    <div class="yt-lockup-dismissable"> 
 
     <div data-context-item-id="this is also found" class="yt-lockup-thumbnail"> 
 
    <span class=" spf-link ux-thumb-wrap contains-addto"><a href="/watch?v=Rg2PUqmNWe4" class="yt-uix-sessionlink" aria-hidden="true" data-sessionlink="videos"> <span class="video-thumb yt-thumb yt-thumb-196"> 
 
<span class="yt-thumb-default">` 
 

 
const getData = data => data.match(/data-context-item-id="(.*?)"/g).map(x => x.match(/"(.*?)"/)[1]) 
 

 
console.log(getData(data))

шаг 1
data-context-item-id=" найти эту часть.
шаг 2
(.*?) захвата ничего до "
шаг 3
map всех найденных ответов, чтобы получить только данные без atribute имени

Преимущество этого решения является возможность более одного вхождения как показано на примере.

+0

Спасибо, что работает отлично. – zeddex

+0

@zeddex Я рад слышать так: D –

1

Javascript regex engine не поддерживает lookbehind утверждения(?<=...).
Используйте следующий подход:

alert(item.match(/data-context-item-id="([^"]+)"/)[1]); 

([^"]+) - соответствует всем символам, кроме "

+0

Спасибо, это работает – zeddex

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