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