REGEX - 否定先行多行检查

REGEX - negative lookahead multiline check

我需要有关正则表达式的帮助,以查找组件中不包含 "maxlength" 属性的所有 <lightning:input/> 字段。

输入示例:

   <lightning:input value="{!v.value}" 
                    aura:id="field" name="name" 
                    maxlength="50" 
                    label="label" 
                    required="true" 
                    />

我已经试过了 (<lightning:input)(?!.*(maxlength)) 但它只检查输入的第一行(不包括新行)。我需要在 IntelliJ IDEA 搜索中使用它。

前瞻中使用的 .* 构造仅允许您检查一行中的后续子模式。但是,您可能不会在此处使用 (?s) DOTALL 修饰符来允许 . 跨行匹配,因为 * 是贪婪的并且会在文档中尽可能多地匹配 [=15] =] 另一个节点文本中的子字符串。

因此,最安全的正则表达式方法是使用 [^<]*? 结构来匹配除 < 之外的任何 0+ 个字符(包括换行字符)尽可能少:

<lightning:input(?![^<]*?maxlength=)

注意我添加了 = 以确保 maxlength 子字符串后跟 =。要将 maxlength 匹配为整个单词,请在其前面添加 \b(单词边界)甚至 \s(空格)。