我正在做一个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
这个正则表达式只捕获第一个属性。
regex breakdown:
**<
**标签开始
**\w+
**一个单词,主要是标签名这会强制避免PHP标签<?php
**\s+
**一个空间或多个空间<tag attr
**(:?
**非抓取组1,我想获取多个属性,但只抓取内容!
**[\w-]+
**一个单词或-
例如attr
或ng-attr
**=
等号属性(:?"|')
非捕获group 2开引号或双引号(.|[\r\n])*?
-我试图捕获的实际数据,捕获所有.
或[\r\n]
换行符\2
-返回引用(:?"|')
**所以我们有“[data]”或“[data]”\s*?
-在下一个标签之前有零个或多个空间不贪婪)
-关闭非捕获组1>?
-开始标记结束不贪婪
我不明白为什么没有捕获多个属性提前感谢您的帮助
1条答案
按热度按时间ldioqlga1#
我看不出这是如何可能做一个单一的正则表达式匹配。据我所知,你不能使用一个后向引用结束来匹配多个sub模式。
相反,我建议分两步处理HTML。首先,使用
然后返回匹配项并使用
此时,您可以在第一个“=”上进行拆分,以将每个属性与其值分开。
Here is a fiddle implementing what I recommend.您的示例文本应该以您想要的方式解析出来。