Javascript Node.js regex替换复杂HTML打开标记中的多个属性
我正在处理一个Node.js项目,在这个项目中,我们正在搜索一堆PHP视图文件,并替换一些属性。 我试图获取HTML打开标记属性值,并替换它们 基本上,如果这是标签Javascript Node.js regex替换复杂HTML打开标记中的多个属性,javascript,regex,node.js,Javascript,Regex,Node.js,我正在处理一个Node.js项目,在这个项目中,我们正在搜索一堆PHP视图文件,并替换一些属性。 我试图获取HTML打开标记属性值,并替换它们 基本上,如果这是标签 <tag attr1="[capture ANYTHING inside single/double qoutes]" attr2='[CAPTURE ANYTHING]'></tag> 我想捕获属性引号中的任何内容。 我所说的[任何东西]其实是指任何东西 示例2:attr=“with HTML也被
<tag attr1="[capture ANYTHING inside single/double qoutes]" attr2='[CAPTURE ANYTHING]'></tag>
我想捕获属性引号中的任何内容。
我所说的[任何东西]
其实是指任何东西
示例2:attr=“with HTML
也被捕获”
示例3:
attr=“带换行符样式\n或\n\r\n
这仍然是应该捕获的内容的一部分
还有这一行!“
示例4:
attr=“也应该捕获PHP代码!”
example5:
title=“{{angular'(如果在属性中):'它也应该是acpture'}}”
我写了下一个正则表达式:
/我看不出一个正则表达式匹配怎么可能做到这一点。据我所知,您无法使用反向引用端匹配多个sub模式
相反,我建议分两步处理HTML。首先,使用
/<\w+\s+[\w-]+=("|')(?:.|[\r\n])*?\1\s+.*?>/g
此时,可以在第一个“=”上拆分,以将每个属性与其值分开
您的示例文本应该按照您想要的方式进行解析。我不知道如何使用单个正则表达式匹配来实现这一点。据我所知,您无法使用反向引用端匹配多个sub模式
相反,我建议分两步处理HTML。首先,使用
/<\w+\s+[\w-]+=("|')(?:.|[\r\n])*?\1\s+.*?>/g
此时,可以在第一个“=”上拆分,以将每个属性与其值分开
您的示例文本应该按照您想要的方式进行解析。(:?
是一个非捕获组?\w
将匹配@torazaburo中的?
请在正则表达式编辑器中运行它,您将看到您的注释是错误的,您可以在这里看到:您指的是哪条注释?我不需要使用正则表达式编辑器来知道(:?
不是非捕获组;它是以可选的:
开头的组。您可能是指(?:
。这可能是您的regexp未捕获多个属性的原因。您的结束引号在哪里?既然您(正在尝试),那么\2
应该引用什么不捕获包含引号的组,对吗?根据定义,反向引用不适用于非捕获组。它只适用于您,因为您将非捕获组错误地写入(:?
,正如我一小时前所说,它不是一个非捕获组,而是一个以可选冒号开头的捕获组。如果您非常喜欢regexp编辑器,请仔细查看他们对您的(:?
结构的叙述性描述。(:?
是一个非捕获组?\w
将匹配@torazaburo中的?
请在正则表达式编辑器中运行它,您将看到您的注释是错误的,您可以在这里看到:您指的是哪条注释?我不需要使用正则表达式编辑器来知道(:?
不是非捕获组;它是以可选的:
开头的组。您可能是指(?:
。这可能是您的regexp未捕获多个属性的原因。您的结束引号在哪里?既然您(正在尝试),那么\2
应该引用什么不捕获包含引号的组,对吗?根据定义,反向引用不适用于非捕获组。它只适用于您,因为您将非捕获组错误地写入(:?
,正如我一小时前所说,它不是一个非捕获组,而是一个以可选冒号开头的捕获组。如果您非常喜欢regexp编辑器,请仔细查看他们对您的(:?
结构的叙述性描述。