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 个或多个字母或数字
  • $ - 字符串结尾。