Tampermonkey - 无法使用Regex获取数据

时间:2017-02-19 19:02:14

标签: javascript regex tampermonkey

我正在尝试使用JavaScript获取Tampermonkey的一些数据。问题在于正则表达式,我在RegExr(Air应用程序)中设计它,它似乎在输入文本上正常工作:

<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 个答案:

答案 0 :(得分: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所有找到的答案只获取没有属性名称的数据

此解决方案的优点是可能会出现多次属性,如示例中所示。

答案 1 :(得分:1)

Javascript正则表达式引擎不支持 lookbehind断言 (?<=...)
使用以下方法:

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

([^"]+) - 匹配除"

以外的所有字符