Excluding some character from a range - javascript regular expression

To validate only word simplest regex would be (I think)

/^\w+$/

I want to exclude digits and _ from this (as it accept aa10aaand aa_aa now, I want to reject them)

I think it can be gained by

 /^[a-zA-z]+$/

which means I have to take a different approach other than the previous one.

but what if I want to exclude any character from this range suppose I will not allow k,K,p,P or more.

Is there a way to add an excluding list in the range without changing the range.?


To exclude k or p from [a-zA-Z] you need to use a negative lookahead assertion.

(?![kpKP])[a-zA-Z]+

Use anchors if necessary.

^(?:(?![kpKP])[a-zA-Z])+$

It checks for not of k or p before matching each character.

OR

^(?!.*[kpKP])[a-zA-Z]+$

It just excludes the lines which contains k or p and matches only those lines which contains only alphabets other than k or p.

DEMO


^(?!.*(?:p|k))[a-zA-Z]+$

This should do it.See demo.The negative lookahead will assert that matching word has no p or k.Use i modifier as well.

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.
}