如何编写匹配不含maxLength的多行AvField正则表达式?
正则表达式匹配不含maxLength的AvField标签
直接给你能用的正则:
<AvField(?:(?!maxLength)[\s\S])*?/>
为什么你原来的正则无效?
你写的(?!.*maxLength)<AvField(.*\n)*?.*/>问题出在负前瞻的位置——它是在<AvField>之前做全局检查,要求整个字符串开头到这个标签前不能出现maxLength,这完全不符合需求。我们要的是AvField标签内部的代码里没有maxLength属性,所以得把负前瞻嵌到标签内容的匹配逻辑里。
正则逻辑拆解
<AvField:匹配标签开头(?:(?!maxLength)[\s\S])*?:(?!maxLength):负前瞻,确保接下来的字符序列不是maxLength的开头[\s\S]:匹配任意字符(包括换行,解决多行标签的问题,代替默认不匹配换行的.)*?:非贪婪匹配,避免把后面的其他标签也包含进来
/>:匹配自闭合标签的结尾
测试验证
匹配成功的案例(不含maxLength的AvField):
<AvField name="myName" /> <AvField name="myName" otherProp="" /> <AvField prop="" prop2="" prop3="" />
匹配失败的案例(含maxLength的AvField):
<AvField maxLength={100} /> <AvField name="myName" otherProp="" maxLength={200} />
内容的提问来源于stack exchange,提问作者Chase Thorpe
相关产品推荐
相关产品推荐

