假设我需要在字符串中至少包含5个字母,而不要求它们是后续字母。下面的正则表达式检查后续字母
[A-Za-z]{5,}
所以,“aaaaa” - true ,但“aaa1aa” - false 。
保留序列条件的正则表达式是什么,上面字符串的两者都会传递为真。
答案 0 :(得分:4)
您可以删除所有带有.replace(/[^A-Za-z]+/g, '')
的非字母字符,然后运行正则表达式:
var strs = ["aaaaa", "aaa1aa"];
var val_rx = /[a-zA-Z]{5,}/;
for (var s of strs) {
console.log( val_rx.test(s.replace(/[^A-Za-z]+/g, '')) );
}

否则,您也可以使用像
这样的一步解决方案
var strs = ["aaaaa", "aaa1aa"];
var val_rx = /(?:[^a-zA-Z]*[a-zA-Z]){5,}/;
for (var s of strs) {
console.log( s, "=>", val_rx.test(s) );
}

见second regex demo online。 (?:[^a-zA-Z]*[a-zA-Z]){5,}
匹配5个或更多连续出现的0个或更多非字母字符([^a-zA-Z]*
),后跟字母字符。
答案 1 :(得分:1)
在字母之间允许使用非字母字符:
(?:[A-Za-z][^A-Za-z]*){5,}
答案 2 :(得分:1)
如果你只需要使用正则表达式,这里有一个有点丑陋的选择:
const check = str => /^(.*[A-Za-z].*){5}/.test(str);
console.log(check("aaaaa"));
console.log(check("aa1aaa"));
console.log(check("aa1aa"));
答案 3 :(得分:1)
w表示正则表达式中的字母数字, 没关系:\ w {5,}
答案 4 :(得分:0)
[a-zA-Z0-9]{5,}
就像这样?或者你的意思是它需要是一个忽略数字的正则表达式?因为上面的内容也会匹配aaaa1
。