首页 > 解决方案 > 如何使用正则表达式匹配不包含多个特定单词之一的字符串?

问题描述

如何使用正则表达式来避免匹配包含多个特定单词之一的字符串?

例如:一个字符串不应该包含单词test, 也不sample

^((?!(sample|test)).)*$

我的正则表达式在某些情况下失败:

1. this is a test case 
2. this is a testing area 

在上面的两个例子中:

  1. 它有这个词test,所以它工作得很好。
  2. 它没有test应该被允许的词

有什么办法可以做到这一点?

标签: javascriptregex

解决方案


您需要\b在单词周围使用,以便它们允许匹配,仅当它们不作为整个单词出现时。试试用这个,

^(?:(?!\b(sample|test)\b).)*$

此外,将组设为非捕获是一个好主意,除非您打算使用它们的值。

正则表达式演示

编辑:

为了使其区分大小写,请通过在正则表达式之后i放置来启用该标志。JS演示,i/

var arr = ['this is a test case','this is a testing area','this is a Test area']

arr.forEach(s => console.log(s + " --> " + /^(?:(?!\b(sample|test)\b).)*$/i.test(s)))


推荐阅读