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

IT技术 javascript regex
2021-03-03 05:21:19

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

/^\w+$/

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

我认为它可以通过

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

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

但是如果我想从这个范围中排除任何字符,假设我不允许k, K, p,P或更多怎么办

有没有办法在不改变范围的情况下在范围内添加排除列表。?

2个回答

要排除kp[a-zA-Z]您需要使用否定前瞻断言。

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

必要时使用锚点。

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

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

或者

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

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

演示

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

这应该可以做到。参见演示。否定前瞻将断言匹配的单词也没有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.
}
@Saif 您接受的答案与我的相同,并且是在我之后发布的 :)
2021-05-13 05:21:19