我正在寻找针对任何名为attrName
的HTML属性的正则表达式,以便可以将其替换为attr
但只能在<Highlight></Highlight>
标记内。
我要定位的一个示例块是:
<Highlight attrName="html">
{'
<div attrName="input action">
\n\t<input type="text" name="name" placeholder="Search..."/>
\n\t<a attrName="button outlined">Search</a>
\n</div>
'}
</Highlight>
到目前为止,我只是想出了正则表达式
<Highlight\s*(attrName)\s*
,但它只针对<Highlight attrName
最佳答案
除了用regex解析这样的代码并不总是一个好主意,您可能还需要比Atom编辑器提供的功能更强大的regex风格。支持PCRE的Notepad++怎么样。
在这里,您可以从开始或某个点开始使用\G
anchor to chain matches。
(?s)(?:<Hi[^>]*>|\G(?!^))(?:(?!</Hi).)*?\KattrName
(?s)
flag用于使点也与换行符匹配。(?:<Hi[^>]*>|\G(?!^))
non capturing group中的第一部分是设置比赛开始的位置。没有(?!^)
负lookahead \G
也将匹配字符串的开头。(?:(?!</Hi).)*?
第二部分匹配任意数量的字符,同时不使用否定的前行和</Hi
前的reset the match by use of \K
来跳过attrName
。Here is the demo at regex101