我正在寻找针对任何名为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

10-08 06:22