JavaScript正则表达式不匹配某个单词

117

如何使用JavaScript正则表达式来检查不包含某些单词的字符串?

例如,我想要一个函数,当传递一个包含abcdef的字符串时,返回false。

'abcd' -> false

'cdef' -> false

'bcd' -> true

编辑

最好能够使用像[ ^ abc]这样简单的正则表达式,但它不能按预期提供结果,因为我需要连续字母。

例如:我需要myregex

if ( myregex.test('bcd') ) alert('the string does not contain abc or def');

myregex.test('bcd')语句的结果为true

6个回答

179

1
这就是我期望的答案!谢谢。我需要一个正则表达式而不是一个函数。我的问题被编辑了,回答出现来回答我的新问题版本。这就是为什么我使用了“EDIT”部分以避免混淆。 - bxx
2
有没有一种答案不匹配整个单词的方法?你的例子“abc”,“babc”和“abcd”都失败了,而“xyz”通过了。我需要“abc”失败,但“abcd”通过。删除“.”和“*”似乎不起作用。 - gman
@gman:不清楚您是想捕获单词(例如捕获“abcd”但不是“abc”),还是像这里一样,只是想匹配不包含“abc”或“def”的整个文本。 “捕获一个单词”和“如果没有一个单词就捕获所有内容”是两个完全不同的事情。然而,如果您想采用负向先行断言的方法,这是您的正则表达式:^((?!((?=\b)abc(?=\b)|(?=\b)def(?=\b))).)*$。如果它不包含任何单词“abc”或“def”,它将捕获整个文本(有点像,注意最后一个字符)。因此,它将匹配“abcd”,但不会匹配“abc?”因为“?”不是单词的一部分。 - Karl Stephen
抱歉,我的意思是 ^((?!(\babc\b|\bdef\b)).)*$。为了捕获“abcd”,但如果文本包含“abc”或“def”,则丢弃整个文本,最好先检查是否存在“abc”或“def”,如果没有,则继续匹配包含“abc”或“def”的单词... 但是...这有任何有用的目的吗? - Karl Stephen

23
if (!s.match(/abc|def/g)) {
    alert("match");
}
else {
    alert("no match");
}

1
你为什么在正则表达式中进行捕获? - Jonathan Hall
好观点!我认为我想到了,如果我不捕获它,可能意味着ab(c|d)ef。 - Petar Ivanov
1
在这种情况下,最好使用/abc|def/g.test(s)返回一个布尔值 ;) - TOPKAT

7
这里有一个简洁的解决方案:
function test(str){
    //Note: should be /(abc)|(def)/i if you want it case insensitive
    var pattern = /(abc)|(def)/;
    return !str.match(pattern);
}

2
function test(string) {
    return ! string.match(/abc|def/);
}

2
function doesNotContainAbcOrDef(x) {
    return (x.match('abc') || x.match('def')) === null;
}

1
这可以用两种方式来完成:
if (str.match(/abc|def/)) {
                       ...
                    }


if (/abc|def/.test(str)) {
                        ....
                    } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接