我需要创建一个符合这个要求的表达式:
该字符串必须由3个子字符串
第一个子串接受0-9a-zA-Z,最小长度为1且没有最大长度
第二个子字符串必须是" - "
最后一个有第一个相同的条件
总字符串长度必须为28个字符
使用Regex可以实现此要求吗?
答案 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_]
)_
字面匹配字符_
(区分大小写)