javascript - 从 HTML 和 JS 源中提取 URL,一行中有多个
问题描述
我想列出我们的源代码引用的所有域,允许仅查找那些静态引用并以 https?:// 开头的域。例如,我尝试了以下方法:
find -s [^.]* -print0 | xargs -0 sed -En 's/.*https?:\/\/([a-z0-9\-\.\_]+).*/\1/p' | sort | uniq
错误是,当一行中有多个域时,只会返回一个。可以用简单的shell 工具来解决这个问题,即不完全解析HTML 吗?
解决方案
正则表达式.*
是贪婪的,因此将它放在正则表达式的开头和结尾将丢弃同一行上的任何其他 URL。
标准grep
无法打印捕获组,如([a-z0-9-._]+)
,但如果有perl
,请替换:
sed -En 's/.*https?:\/\/([a-z0-9\-\.\_]+).*/\1/p'
有了这个:
perl -nle 'print $1 while m{https?://([a-z0-9-._]+)}g'
https?://([a-z0-9-._]+)
是我们新的正则表达式,它只匹配我们正在寻找的内容,保持每一行的完整性。while m{...}g
遍历正则表达式的每个匹配项。print $1
显示我们的正则表达式的第一个捕获([a-z0-9-._]+)
您的最终命令将是:
find -s [^.]* -print0 | xargs -0 perl -nle 'print $1 while m{https?://([a-z0-9-._]+)}g' | sort | uniq
推荐阅读
- react-native - 设置borderRadious时图像消失
- excel-formula - 如何在 Excel 中编写双向查找值的公式
- ios - Safari 中的 iOS 深层链接未自动打开
- c# - 如何使用 Json.Net 在永久打开的套接字上传递 Json?
- javascript - 如何在 Chart.js 中将 NaN 值更改为 0?
- regex - 正则表达式 [a-z_]+ 但必须至少包含一个下划线?
- angular - Angular http.post() 给出:“错误 415 不受支持的 MIME 类型”
- c++ - 无法访问存储在单个 UBO OpenGL 中的一组剪切平面?
- javascript - MySQL + Sequelize:无法添加或更新子行:外键约束失败
- c# - 如何在 MVC 框架中使用 MQTT 连接到代理?