Javascript 正则表达式:数字和字母的组合 (i) 除了 1
Javascript Regex: Combinations of numbers and letters (i) except 1
我正在编写一个应该匹配以下谓词的正则表达式:
字母和数字的组合,数字 1 除外。
例如:TRS234、A2B3C4、2A3B4C、223GFG
我想到了这个正则表达式:
const regex = /^(?:[^1]+[a-z]|[a-z]+[^1])[a-z][^1]*$/i
它几乎匹配除 2A3B4C
之外的所有情况,我一直在进行大量研究,但我不明白为什么它不适用于该特定情况。非常感谢任何改进正则表达式的帮助或建议。
提前致谢!
注意 [^1]
匹配除 1
之外的任何字符,即它也匹配 §
、ł
等。此外,[a-z][^1]*
匹配字母后跟除 1
以外的任何 0+ 个字符,因此正则表达式不会验证预期的字符串模式。
您可以使用
const regex = /^(?:[02-9]+[a-z]|[a-z]+[02-9])[a-z02-9]*$/i
或者,一种变体:
const regex = /^(?=[a-z02-9]*$)(?:\d+[a-z]|[a-z]+\d)[a-z\d]*$/i
参见 regex demo and the regex graph:
详情
^
- 字符串开头
(?:[02-9]+[a-z]|[a-z]+[02-9])
- 两者之一:
[02-9]+[a-z]
- 1
以外的 1 个或多个数字后跟一个字母
|
- 或
[a-z]+[02-9]
- 1 个或多个字母后跟 1
以外的数字
[a-z02-9]*
- 1
以外的 0 个或多个字母或数字
$
- 字符串结尾。
我正在编写一个应该匹配以下谓词的正则表达式:
字母和数字的组合,数字 1 除外。
例如:TRS234、A2B3C4、2A3B4C、223GFG
我想到了这个正则表达式:
const regex = /^(?:[^1]+[a-z]|[a-z]+[^1])[a-z][^1]*$/i
它几乎匹配除 2A3B4C
之外的所有情况,我一直在进行大量研究,但我不明白为什么它不适用于该特定情况。非常感谢任何改进正则表达式的帮助或建议。
提前致谢!
注意 [^1]
匹配除 1
之外的任何字符,即它也匹配 §
、ł
等。此外,[a-z][^1]*
匹配字母后跟除 1
以外的任何 0+ 个字符,因此正则表达式不会验证预期的字符串模式。
您可以使用
const regex = /^(?:[02-9]+[a-z]|[a-z]+[02-9])[a-z02-9]*$/i
或者,一种变体:
const regex = /^(?=[a-z02-9]*$)(?:\d+[a-z]|[a-z]+\d)[a-z\d]*$/i
参见 regex demo and the regex graph:
详情
^
- 字符串开头(?:[02-9]+[a-z]|[a-z]+[02-9])
- 两者之一:[02-9]+[a-z]
-1
以外的 1 个或多个数字后跟一个字母|
- 或[a-z]+[02-9]
- 1 个或多个字母后跟1
以外的数字
[a-z02-9]*
-1
以外的 0 个或多个字母或数字
$
- 字符串结尾。