Javascript正则表达式:数字和字母(i)的组合,但1除外

时间:2019-06-09 11:02:02

标签: javascript regex regex-lookarounds angular-validation

我正在写一个正则表达式,应与以下谓词匹配:

字母和数字的组合(数字1除外)。

EG:TRS234,A2B3C4、2A3B4C,223GFG

我想出了这个正则表达式:

const regex = /^(?:[^1]+[a-z]|[a-z]+[^1])[a-z][^1]*$/i

除了2A3B4C以外,几乎所有情况都适用,我已经做了很多研究,但我不明白为什么它不适用于该特定情况。对于改进正则表达式的任何帮助或建议,将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

请注意,[^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 demoregex graph

enter image description here

详细信息

  • ^-字符串的开头
  • (?:[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个或多个字母或数字
  • $-字符串的结尾。