【问题标题】:Javascript Regex: Combinations of numbers and letters (i) except 1Javascript 正则表达式:数字和字母的组合 (i) 除了 1
【发布时间】:2019-06-09 11:02:02
【问题描述】:

我正在编写一个应该匹配以下谓词的正则表达式:

字母和数字的组合,除了数字 1。

例如:TRS234、A2B3C4、2A3B4C、223GFG

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

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

它几乎匹配除2A3B4C 之外的所有情况,我一直在进行大量研究,但我不明白为什么它不适用于特定情况。任何改进正则表达式的帮助或建议将不胜感激。

提前致谢!

【问题讨论】:

标签: javascript regex regex-lookarounds angular-validation


【解决方案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

详情

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

【讨论】:

  • 您使用哪个程序来获得如此出色的正则表达式图形表示?
  • @Guillermo 所有链接都在答案中。见this site
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2017-09-25
相关资源
最近更新 更多