构造一个具有三个子模式的正则表达式,最大长度为28个字符

时间:2018-04-14 13:52:08

标签: javascript regex

我需要创建一个符合这个要求的表达式:

  • 该字符串必须由3个子字符串

  • 组成
  • 第一个子串接受0-9a-zA-Z,最小长度为1且没有最大长度

  • 第二个子字符串必须是" - "

  • 最后一个有第一个相同的条件

  • 总字符串长度必须为28个字符

使用Regex可以实现此要求吗?

1 个答案:

答案 0 :(得分:1)

以下正则表达式应该可以正常工作:

/(?=^.{3,28}$)[^\W_]+\-[^\W_]+/

var array = [
  "123456790-123456789012345678",
  "123456790-1234567890123456789",
  "adsd-dsds"
];
var re = /(?=^.{3,28}$)[^\W_]+\-[^\W_]+/;
array.forEach(e => console.log(re.test(e) ? e.match(re)[0]: "match failed"));

细分从regex101.com无耻地复制:

  • 积极前瞻(?=^.{3,28}$)
    • ^在行的开头断言位置
    • .{3,28}匹配任何字符(行终止符除外)
    • {3,28}量词 - 匹配3至28次,尽可能多次,根据需要回馈(贪婪)
    • $在一行结尾处断言位置
  • 匹配[^\W_]+下方列表中不存在的单个字符
    • +量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
    • \W匹配任何非字字符(等于[^a-zA-Z0-9_]
    • _字面匹配字符_(区分大小写)
    • \-匹配字符 - 字面意思(区分大小写)
  • 匹配[^\W_]+下方列表中不存在的单个字符
    • +量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)
    • \W匹配任何非字字符(等于[^a-zA-Z0-9_]
    • _字面匹配字符_(区分大小写)