Javascript正则表达式字符排除

Mar*_*dek 4 javascript regex

我有一个这样的js正则表达式:

/^[a-zA-Z?ó????????Ó???????]+$/
Run Code Online (Sandbox Code Playgroud)

现在我想从像QVXqvx这样的a-zA-Z字母中排除.如何改变这个正则表达式的语法?

我试过但没有运气.请帮我.

提前致谢

Jam*_*ing 8

你仍然可以做范围,但你必须做范围排除这些字母,所以像A-PR-UWYZ


sle*_*han 8

最好的方法是简单地更新范围以排除您不想要的字母.这会让你这样:

/^[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)