我有一大串HTML(和javascript)。我需要获取document.write()
中的文本<script>
$('.navigation').html();
window.jQuery || document.write("<script src='//cdn.shopify.com/s/files/1/0967/6522/t/2/assets/jquery.min.js?15152727378558387064'> $('.link').attr('href',url) \x3C/script>")
$('.button').html();
</script>
目前我找到了document.write的索引,然后删除了之前的任何文本。
strIndex = scriptHtml.indexOf('document.write(');
scriptHtml = scriptHtml.substr(strIndex);
这将留下我这样的字符串。
document.write("<script src='//cdn.shopify.com/s/files/1/0967/6522/t/2/assets/jquery.min.js?15152727378558387064'> $(".link").attr('href',url) \x3C/script>")
$('.button').html();
</script>
我需要找到这个新字符串中的第一个括号,然后知道匹配的括号结束的位置,以便我可以在其中获取字符串。
我尝试了一些正则表达式,但不能使其有效。
\(([^)]+)\)
上述正则表达式不起作用,因为它匹配:
("<script src='//cdn.shopify.com/s/files/1/0967/6522/t/2/assets/jquery.min.js?15152727378558387064'> $(".link")
因为它只是搜索一个开始和结束括号而不考虑已打开多少。
有没有人知道我怎么能得到我想要的文字或想到一个更好的方法我可以在document.write里面找到文本?
由于
答案 0 :(得分:0)
正则表达式根本不是匹配可以嵌套的括号的正确工具,因为它们缺少允许您正确执行此操作的机制(在本例中为递归)。有关详细信息,请参阅this answer。
也就是说,在您发布的示例代码中,只需将字符串 document.write 与其引号匹配即可(假设您将整个代码放入名为str
的变量中):
console.log(str.match(/document\.write\("([^"]*)"\)/)[1]);
然而,我强烈建议不要这样做,因为有许多可能的情况,以这种方式解析它将失败并且考虑所有可能性非常复杂并且实际上取决于您对(或控制)的了解程度可能的输入。