我有一个这样的js正则表达式:
/^[a-zA-Z?ó????????Ó???????]+$/
Run Code Online (Sandbox Code Playgroud)
现在我想从像QVXqvx这样的a-zA-Z字母中排除.如何改变这个正则表达式的语法?
我试过但没有运气.请帮我.
提前致谢
最好的方法是简单地更新范围以排除您不想要的字母.这会让你这样:
/^[a-pr-uwyzA-PR-UWYZ?ó????????Ó???????]+$/
Run Code Online (Sandbox Code Playgroud)
您可以使用负前瞻来提取一种形式的字符类减法.但是,由于您为每个匹配的字符串重复否定前瞻,因此效率会降低.在任何情况下,这是什么样子:
/^(?:(?![qvxQVX])[a-zA-Z?ó????????Ó???????])+$/
Run Code Online (Sandbox Code Playgroud)
当你没有像这样无限次重复一个角色类时,这种方法效果最好.
包括Java和.NET在内的几种正则表达式使用特殊语法有效地支持字符类减法.
在Java中,与否定组相交:
/^[a-zA-Z?ó????????Ó???????&&[^qvxQVX]]+$/
Run Code Online (Sandbox Code Playgroud)
一个鲜为人知的事实是Opera Web浏览器实际上在其原生JavaScript正则表达式中支持上述Java语法.Opera可能会在将来删除此功能,因为它是非标准的(它基于废弃的ES4提议),但它至少在当前版本(v11.64)中有效.
.NET,XPath和XML Schema支持以下更简单的字符类减法语法:
/^[a-zA-Z?ó????????Ó???????-[qvxQVX]]+$/
Run Code Online (Sandbox Code Playgroud)