5

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

/^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+$/

现在我想从像 QVXqvx 这样的 a-zA-Z 字母中排除。应该如何更改此正则表达式的语法?

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

提前致谢

4

4 回答 4

8

你仍然可以做范围,但你必须做不包括这些字母的范围,所以像 A-PR-UWYZ

于 2012-05-27T22:33:44.283 回答
8

最好的方法是简单地更新范围以排除您不想要的字母。那会给你留下这个:

/^[a-pr-uwyzA-PR-UWYZęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+$/

您可以使用负前瞻来完成一种字符类减法。但是,由于您为每个匹配的字符串重复负前瞻,因此效率会降低。无论如何,这就是它的样子:

/^(?:(?![qvxQVX])[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ])+$/

当您没有像这样无限次数地重复一个字符类时,这最有效。

包括 Java 和 .NET 在内的几种正则表达式风格有效地支持使用特殊语法的字符类减法。

在 Java 中,与一个否定组相交:

/^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ&&[^qvxQVX]]+$/

一个鲜为人知的事实是,Opera Web 浏览器实际上在其原生 JavaScript 正则表达式中支持上述 Java 语法。Opera 将来可能会删除此功能,因为它是非标准的(它基于废弃的 ES4 提议),但至少在当前版本(v11.64)中有效。

.NET、XPath 和 XML Schema 支持以下更简单的字符类减法语法:

/^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ-[qvxQVX]]+$/
于 2012-05-28T05:59:37.370 回答
1

你不能。在这种情况下,您需要手动枚举除排除之外的所有字母QVXqvx

于 2012-05-27T22:30:27.153 回答
0

/^[a-pA-PR-Ur-uWwYyZzęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+$/

于 2012-05-27T23:16:54.200 回答