regex - 通过正则表达式在加载页面上的 DOM 中分离部分脚本标记
问题描述
我想将包含 Javascript 标记的 DOM 的一部分与名为变量的变量分开,该变量matchData
在 laravel 中是一个如下所示的对象:
<div>
some data
<div>
<script type="text/javascript">
var matchData = {
sportId: 0,
id: 80302,
host: {
id: 921587,
name: "نفت‌
}
}
</script>
<div>
some data
<div>
<script>
...
</script>
我想matchData
通过正则表达式获得价值。我试试这个:
/\bmatchData\s*=\s*(.+)(?=;|<\/script>)/
但它只在 dom 中没有任何新行或标签时才起作用。我怎样才能得到matchData
正则表达式?
解决方案
正则表达式不太适合这项任务!HTML 解析器是一个更好的选择。话虽如此,如果您对使用正则表达式一无所知,这可能会起作用:var matchData[\s\S]*?(?=<\/script>)
这从名为 的 var 开始匹配matchData
,然后继续匹配,直到到达第一个</script>
标签的末尾。这个解决方案非常不灵活,并且可以通过多种方式轻松破解(例如</script>
名称中的 if ),但如果它用于快速而肮脏的项目并且您不关心可维护的代码,它会适合您的需求。
推荐阅读
- android - 工具栏出现在 android 应用程序的底部而不是顶部
- reactjs - 如何删除具有类组件字段的 FieldArray 中的字段
- sql - Informix - 高效查找 10 个最近的调用
- c# - 使用 ASP Net Core 在 Web API 中修改传入请求的路由
- angular - 如何在接口 Angular 4 中导入枚举
- javascript - 打开 onclick 事件 python 请求库
- python - 如何在崩溃时自动重启你的不和谐机器人
- asp.net - 服务器上 IE 中的字体渲染不同
- iis - 在 IIS 上调试 ASP.NET Core 应用程序
- css - CSS缩放字母间距与流体字体大小成比例