javascript - Javascript 正则表达式匹配
问题描述
我正在尝试将<svg>
标签与可选属性viewBox匹配并提取其值。我想匹配以下所有<svg>
标签变体:
<svg width="28" height="32" viewBox="0 0 28 32">
<!-- svg content must be grouped -->
</svg>
<svg viewBox="0 0 28 32">
<!-- svg content must be grouped -->
</svg>
<svg width="28" height="32" viewBox="0 0 28 32">
<!-- svg content must be grouped -->
</svg>
<svg>
<!-- svg content must be grouped -->
</svg>
<svg viewBox="0 0 28 32" width="28" height="32">
<!-- svg content must be grouped -->
</svg>
在这里,宽度和高度以及viewBox是可选的,并且 viewBox 属性的值和 svg 内容必须被分组。
如果 viewBox 是必需属性,则以下正则表达式有效:
/<svg\b[^>]*\s*(viewBox=\"(\b[^"]*)\").*?>([\s\S]*?)<\/svg>/
请看演示
但是当我制作viewBox可选组时,没有匹配的组(注意括号后的?符号):
/<svg\b[^>]*\s*(viewBox=\"(\b[^"]*)\")?.*?>([\s\S]*?)<\/svg>/
解决方案
推荐阅读
- python - 不确定 /?(.+) 在我的正则表达式中如何工作
- python-sphinx - Sphinx: Use a different directive for a different output format
- wpf - 具有多个兄弟姐妹的 WPF GridSplitter 无法按预期工作
- r - 创建矩阵,其中所有对角线在反对角方向上的值相同
- php - 从 Guzzle 流中获取项目
- python - f.write,如何修复页面顶部的标题?
- javascript - jQuery Modal 在第三次点击时关闭
- python - Tesseract OCR 准确性对图像中文本数量的依赖性
- php - 有没有办法从 laravel 中删除 algolia/scout?
- gatsby - Google 自定义搜索框不会在我的 Gatsby 项目中首次加载时出现,仅在重新加载或刷新时出现