首页 > 解决方案 > 通过正则表达式在加载页面上的 DOM 中分离部分脚本标记

问题描述

我想将包含 Javascript 标记的 DOM 的一部分与名为变量的变量分开,该变量matchData在 laravel 中是一个如下所示的对象:

<div>
   some data
<div>
<script type="text/javascript">
    var matchData = {
        sportId: 0,
        id: 80302,
        host: {
            id: 921587,
            name: "&#1606;&#1601;&#1578;&zwnj; 
        }
}
</script>
<div>
   some data
<div>
<script>
     ...
</script>

我想matchData通过正则表达式获得价值。我试试这个:

/\bmatchData\s*=\s*(.+)(?=;|<\/script>)/

但它只在 dom 中没有任何新行或标签时才起作用。我怎样才能得到matchData正则表达式?

标签: regexlaravel

解决方案


正则表达式不太适合这项任务!HTML 解析器是一个更好的选择。话虽如此,如果您对使用正则表达式一无所知,这可能会起作用:var matchData[\s\S]*?(?=<\/script>)

这从名为 的 var 开始匹配matchData,然后继续匹配,直到到达第一个</script>标签的末尾。这个解决方案非常不灵活,并且可以通过多种方式轻松破解(例如</script>名称中的 if ),但如果它用于快速而肮脏的项目并且您不关心可维护的代码,它会适合您的需求。

演示


推荐阅读