要验证单词最简单的正则表达式(我认为)
/^\w+$/
我想从中排除数字和_
(现在接受aa10aa
和aa_aa,我想拒绝它们)
我认为可以通过
获得 /^[a-zA-z]+$/
这意味着我必须采取与前一种方法不同的方法。
但如果我想从此范围中排除任何字符该怎么办?
假设我不允许k
,K
,p
,P
或更多。
有没有办法在不改变范围的情况下在范围内添加排除列表。
答案 0 :(得分:14)
要从k
中排除p
或[a-zA-Z]
,您需要使用否定前瞻声明。
(?![kpKP])[a-zA-Z]+
必要时使用锚点。
^(?:(?![kpKP])[a-zA-Z])+$
在匹配每个字符之前,它会检查k
或p
。
OR
^(?!.*[kpKP])[a-zA-Z]+$
它只排除包含k
或p
的行,并且只匹配那些仅包含k
或p
以外的字母的行。
答案 1 :(得分:4)
^(?!.*(?:p|k))[a-zA-Z]+$
这应该这样做。参见演示。否定前瞻将断言匹配的单词没有p
或k
。也可以使用i
修饰符。
https://regex101.com/r/vD5iH9/31
var re = /^(?!.*(?:p|k))[a-zA-Z]+$/gmi;
var str = 'One\nTwo\n\nFour\nFourp\nFourk';
var m;
while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}