我想匹配一个字符串,规则如下:
1.由字母、数字、点、减号、下划线组成;
2.点(.)、减号(-)、下划线(_)不在开头或结尾;
3.点(.)、减号(-)、下划线(_)任意两个字符不连续出现。
我在匹配第三条规则时候遇到了困难:
我的代码如下
// 匹配
let arr1 = ['a','1','a1','aa','11','1a','a_1','a-1','a.1','a.1.1','a-a-1.1'];
// 不匹配
let arr2 = ['_a','a.-_a','-a','a--a','a-.a','a-','?','aa?','?aa'];
let r = /^[\w^\_][\w\-\.]+[\w^\_]$/;
arr1.forEach(str => {
console.log(r.test(str));
})
arr2.forEach(str => {
console.log(r.test(str));
})
上面的好像不能匹配'a_._a'
写个好理解的,任意个(数字或字符)后面跟一个(点、减号或下划线),这组成一个组合,这个组合可以有任意个,最后面是一个(数字或字符)
/^([0-9a-zA-Z]+[\.\-_])*[0-9a-zA-Z]+$/