我正在开发一个Node.js项目,在这个项目中我们正在搜索一堆PHP视图文件,并替换了一些属性。 我正在尝试获取HTML开放标记属性值,并替换它们。
基本上,如果这是标签
<tag attr1="[capture ANYTHING inside single/double qoutes]" attr2='[CAPTURE ANYTHING]'></tag>
我想捕获属性引号内的任何内容。
并且[ANYTHING]
我的意思是真的!
example2 :attr="with HTML <br/><b>also been captured</b>"
example3 :attr="with line break style \n or \n\r
this is still is part of what should been captured
and this line too!"
example4 :attr="a PHP code <?php echo $ThisPHPcodeisInsideTheQoutes?> should be captured as well!"
example5 :title="{{angular?'if inside the attribute': 'it should be acptured as well' }}"
我写了下一个正则表达式:
/<\w+\s+(:?[\w-]+=(:?"|')(.|[\r\n])*?\2\s*?)>?/g
这个正则表达式只捕获第一个属性。
带有一些演示数据的
<
标签开始
\w+
一个词,主要是标记名称,这将强制避免使用PHP标记<?php
\s+
空格或多个sapces<tag attr
(:?
非捕获组1,我希望获得多个属性,但只捕获内容!
[\w-]+
一个字或-
例如attr
或ng-attr
=
属性等号
(:?"|')
非捕获组2打开引号或双qoutes
(.|[\r\n])*?
- 我尝试捕获的实际数据,捕获所有.
或[\r\n]
换行符\2
- 对(:?"|')
的反向引用“[数据]”或“[数据]”\s*?
- 在下一个标记不贪婪之前零或多个sapces
)
- 关闭非捕获组1>?
- 开头标记的结尾不是贪心
我不明白为什么没有捕获多个属性 在此先感谢您的帮助
答案 0 :(得分:0)
我不知道单个正则表达式匹配是如何做到的。据我所知,您无法使用反向引用匹配多个子模式。
相反,我建议分两步处理HTML。首先,使用
提取开始标记字符串/<\w+\s+[\w-]+=("|')(?:.|[\r\n])*?\1\s+.*?>/g
然后返回匹配并使用
提取每个属性/值对/([\w-]+=("|')(?:.|[\r\n])*?\2)/g
此时,您可以拆分第一个“=”以将每个属性与其值分开。
Here is a fiddle implementing what I recommend.您的示例文本应该按照您希望的方式进行解析。