使用正则表达式

时间:2016-07-09 11:51:00

标签: javascript html regex atom-editor

我正在寻找一个正则表达式,该表达式定位任何名为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

2 个答案:

答案 0 :(得分:1)

除了用正则表达式解析这样的代码并不总是一个好主意之外,你可能需要比Atom编辑器提供的更强大的正则表达式。如何支持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

答案 1 :(得分:0)

这将找到属性:(?<=<[^<]+)attrName(?=\s*=[^>]+>)

这将找到属性出现的HTML标记:<[^<]+attrName\s*=[^>]+>