我在一家开发Angular应用程序的公司工作。我工作的公司内部的组件库已经发布了对HTML标记格式的一些更改。例如,在之前的版本中,这是有效的:
<component-name directive some-other-attribute="" *ngIf=" etc></component-name>
但是,此库的维护者已发布更新,将结构更改为:
<directive><component-name some-other-attribute *ngIf="" etc></component-name></directive>
基本上,最初的指令本身就是一个组件。
我工作的应用程序有100个这样的事件,并且通过它们所有这些都是非常繁琐的工作,需要花费很多时间。是否有正则表达式,我可以匹配原始字符串的第一部分(<component-name directive
),忽略其他所有内容,直到它到达结束标记,然后使用{{1}替换起始和结束标记}。它必须以这种方式完成,因为在某些情况下使用<directive><component-name [everything else]></component-name></directive>
时没有<component-name>
,我不希望这些实例有directive
结束标记。
我使用WebStorm作为我的IDE,所以可以在那里使用任何重构/查找和替换功能,虽然我可以使用任何终端工具来完成这项工作。
虽然我知道正则表达式不应该用于anything to do with HTML,但我不确定我还会使用什么(显然,欢迎提出建议/解决方案)。我已经尝试了一些正则表达式(我对这些很垃圾),例如:
</directive>
这里我试图匹配第一部分,并忽略所有内容直到结束标记。但是,我不确定如何用新文本替换匹配(尽管我知道我可以使用WebStorm查找和替换正则表达式来执行此操作)。但是,这并没有奏效。
总结一下:我需要将<component-name directive [^.*(?=>)]<\/component-name>
替换为<component-name directive [other attributes ignored]></component-name>
。
答案 0 :(得分:0)
首先备份您要处理的所有html文件,以防万一!
通常情况下, sed 将在Mac上的命令行提示符处可用。
所以试试这个,假设你要编辑的所有文件都在同一个目录中,并且名字中有一个html扩展名,并假设<component-name>
的开始和结束标记在同一行:
sed -i 's/\(<component-name \)directive \([^<]*<\/component-name>\)/<directive>\1\2<\/directive>/' *.html