用于在 HTML 字符串多行中提取数据的正则表达式

Regex for extracting Data in a HTML string Multline

我正在尝试通过 get 请求提取一些数据,它 returns 一个 HTML 运行 一个简单的 script.js in Node

来自 Axios.getdata 是一个 HTML 我需要 <script></script> 中的两个键,看起来像这样:

more html
...
$(document).ready(function() {
        vlive.tv.common.init("en", "VE", "5454545");
        vlive.video.init("VOD", "45454", "VOD_ON_AIR", "NONE", "54454F",
            "6FABE43B271345FFCFA4D2028AF85F80C9F6",
            "V1294005a2aac29b64592ce9e636d68fb5506721c2ceac160d67a0488c1d25f3314bace9e636d68fb5506",
            [],
            "", "true", "false");
         new vlive.video.list().init("suggest", "6", "/video/suggest/more", {videoSeq:"454545", channelCode:"54545"});  new vlive.video.list().init("upcoming", "6", "/video/upcoming/more", {videoSeq:"54545", playlistSeq:"", channelCode:"5454545"}); 
        vlive.tv.live.thumb.handler.init("https://vlive-thumb.pstatic.net");
        vlive.tv.share.init("Some Title", "https://www.vlive.tv/video/xxxx", "https://v-phinf.pstatic.net/20190811_131/4509495095_JPEG/93e3a15d-bc43-11e9-a12f-5054343_43.jpg?type=a720_play", "shareVod_343434_4455457", "45454");
        vlive.video.showShoppingBanner("4544343");

    });
...
more html

我想要这个值:"6FABE43B271345FFCFA4D2028AF85F80C9F6""V1294005a2aac29b64592ce9e636d68fb5506721c2ceac160d67a0488c1d25f3314bace9e636d68fb5506"

有了这个,我想制作一个像

这样的数组
{
id: '6FABE43B271345FFCFA4D2028AF85F80C9F6', 
key:'V1294005a2aac29b64592ce9e636d68fb5506721c2ceac160d67a0488c1d25f3314bace9e636d68fb5506'
}

我可以做数组部分,但我真的无法在脑海中总结 RegEx 部分,我真的试过了。我得到的最多的是使用这个正则表达式:

(vlive.video.init)([\S\s]*?)\;

regexr

id 和 key 的位置在这部分总是固定的,因为我用不同的链接做了多次测试。感谢您的帮助!

也许,有些表达类似于,

(?<=")(?:[A-Z][a-f0-9]{84}|[A-F0-9]{36})(?=")

或者,

[A-Z][a-f0-9]{84}|[A-F0-9]{36}

或者,

"([A-Z][a-f0-9]{84}|[A-F0-9]{36})"

可能会提取所需的 idkey

Demo 1

Demo 2


If you wish to explore/simplify/modify the expression, it's been explained on the top right panel of regex101.com. If you'd like, you can also watch in this link, how it would match against some sample inputs.


const regex = /(?<=")(?:[A-Z][a-f0-9]{84}|[A-F0-9]{36})(?=")/gm;
const str = `$(document).ready(function() {
        vlive.tv.common.init("en", "VE", "5454545");
        vlive.video.init("VOD", "45454", "VOD_ON_AIR", "NONE", "54454F",
            "6FABE43B271345FFCFA4D2028AF85F80C9F6",
            "V1294005a2aac29b64592ce9e636d68fb5506721c2ceac160d67a0488c1d25f3314bace9e636d68fb5506",
            [],
            "", "true", "false");
         new vlive.video.list().init("suggest", "6", "/video/suggest/more", {videoSeq:"454545", channelCode:"54545"});  new vlive.video.list().init("upcoming", "6", "/video/upcoming/more", {videoSeq:"54545", playlistSeq:"", channelCode:"5454545"}); 
        vlive.tv.live.thumb.handler.init("https://vlive-thumb.pstatic.net");
        vlive.tv.share.init("Some Title", "https://www.vlive.tv/video/xxxx", "https://v-phinf.pstatic.net/20190811_131/4509495095_JPEG/93e3a15d-bc43-11e9-a12f-5054343_43.jpg?type=a720_play", "shareVod_343434_4455457", "45454");
        vlive.video.showShoppingBanner("4544343");

    });`;
let m;

while ((m = regex.exec(str)) !== null) {

if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    

    m.forEach((match, groupIndex) => {
        console.log(match);
    });
}