Regex:检测多行HTMLElement中的模式

mhd8tkvw  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(97)

基本上,我需要排除[my-property]检测时,在一个div的内容,但有当它是一个属性。
我有这个regex:/(?<!\>)(\[\s*@?[-_a-zA-Z0-9.$]*%?\s*])(=)(["'])/
这些测试:
应返回匹配项

<div [ ngStyle ]="{'max-width.px': i * 2 + 5}"></div>
<div [ngClass]="[
    'class-one',
    'class-two',
    'class-three'
]"></div>
<div [style.right.%]="val"></div>
<div [@animation.trigger]="val"></div>
<img [attr.aria-label]="val" />
<div [my-property]="val"></div>
<div [my_property]="val"></div>
<div [myProperty$]="val"></div>

下面应该返回无匹配项

<div [%invalidProperty]="val"></div>
<div [invalidProperty)="val"></div>
<div>[my-property]="val"</div>
<div>
    [my-property]="val"
</div>

每个测试都是正确的,但最后一个测试也需要排除。
我如何改进我的负向后看以排除最后一个测试?
Regex 101

6mzjoqzu

6mzjoqzu1#

如果可以接受可变/无限长度的负向后看,则可以使用

(?<!>\s*)(\[\s*@?[-_a-zA-Z0-9.$]*%?\s*])(=)(["'])

演示here
如果没有,你需要匹配自上一个<以来的所有内容,以检查之间是否没有>

(<[^>]*)(\[\s*@?[-_a-zA-Z0-9.$]*%?\s*])(=)(["'])

演示here。我认为它应该适合这种情况,因为你已经匹配了一堆员工。
此外,这个解决方案还附带了一个额外的好处,即缺乏负面的lookarounds,这是不支持的相对recent versions的Safari。

相关问题