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

时间:2015-02-02 05:45:09

标签: javascript regex

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

/^\w+$/

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

我认为可以通过

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

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

但如果我想从此范围中排除任何字符该怎么办? 假设我不允许kKpP或更多。

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

2 个答案:

答案 0 :(得分:14)

要从k中排除p[a-zA-Z],您需要使用否定前瞻声明。

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

必要时使用锚点。

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

在匹配每个字符之前,它会检查kp

OR

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

它只排除包含kp的行,并且只匹配那些仅包含kp以外的字母的行。

DEMO

答案 1 :(得分:4)

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

这应该这样做。参见演示。否定前瞻将断言匹配的单词没有pk。也可以使用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.
}