从范围中排除某些字符--javascript正则表达式

Sai*_*aif 9 javascript regex

只验证单词最简单的正则表达式(我认为)

/^\w+$/
Run Code Online (Sandbox Code Playgroud)

我想排除数字并_从中排除(因为它aa10aa现在接受和aa_aa,我想拒绝它们)

我认为它可以通过

 /^[a-zA-z]+$/
Run Code Online (Sandbox Code Playgroud)

这意味着我必须采取不同于前一种方法的方法.

但如果我想排除在此范围内的任何字符想我不会允许k,K,p,P或者更多.

有没有办法在范围内添加排除列表而不更改范围.?

Avi*_*Raj 15

要排除kp[a-zA-Z]你需要使用负前向断言.

(?![kpKP])[a-zA-Z]+
Run Code Online (Sandbox Code Playgroud)

必要时使用锚.

^(?:(?![kpKP])[a-zA-Z])+$
Run Code Online (Sandbox Code Playgroud)

它检查不是kp每个字符匹配之前.

要么

^(?!.*[kpKP])[a-zA-Z]+$
Run Code Online (Sandbox Code Playgroud)

它只是排除其中包含线kp与只匹配那些只包含字母以外的其他线路kp.

DEMO


vks*_*vks 5

^(?!.*(?:p|k))[a-zA-Z]+$
Run Code Online (Sandbox Code Playgroud)

这应该可以做到。参见演示。否定前瞻将断言匹配的单词也没有pk.Usei修饰符。

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.
}
Run Code Online (Sandbox Code Playgroud)