我有这个JavaScript正则表达式:
但是我想要排除一些字母,即
/^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+$/
但是我想要排除一些字母,即
a-zA-Z
中的 qvxQVX
。我该如何修改正则表达式来实现这个目标?/^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+$/
a-zA-Z
中的 qvxQVX
。我该如何修改正则表达式来实现这个目标?您仍然可以使用范围,但是您需要排除那些字母,例如A-PR-UWYZ。
最好的方法是更新范围,以排除您不想要的字母。这样就会得到以下内容:
/^[a-pr-uwyzA-PR-UWYZęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+$/
/^(?:(?![qvxQVX])[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ])+$/
当您不像这样无限次重复字符类时,此方法效果最佳。
包括Java和.NET在内的多种正则表达式语法支持使用特殊语法进行字符类减法。
在Java中,可以与否定组相交:
/^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ&&[^qvxQVX]]+$/
/^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ-[qvxQVX]]+$/
不行。在这种情况下,您需要手动枚举除了排除的 QVXqvx
以外的所有字母。
随着新引入的v
标志(请参见功能提案,截至2023年5月16日已进入TC39流程的第4阶段),不再需要基于lookaround的解决方法。
如果您的JavaScript环境支持v
标志,则可以在字符类中使用--
运算符执行字符类减法。以下是一个示例,匹配所有希腊字母但不包括派:
console.log(/[\p{Script_Extensions=Greek}--π]/v.test('π')) // => false
console.log(/[\p{Script_Extensions=Greek}]/v.test('π')) // => true
a-zA-Z
范围中“排除” Q
、V
、X
、q
、v
和 x
,您可以使用 嵌套字符类:
console.log(Array.from(
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.matchAll(
/[[A-Za-z]--[QVXqvx]]/vg)).flat().join(""))
// => ABCDEFGHIJKLMNOPRSTUWYZabcdefghijklmnoprstuwyz
--harmony-regexp-unicode-sets
标志提供了对这种新功能的实验性支持。v
标志。 - Boris Verkhovskiyv
标志。 - user3064538/^[a-pA-PR-Ur-uWwYyZzęóąśłżźćńĘÓĄŚŁŻŹĆŃ]+$/