Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您可以使用javascript条件正则表达式语句吗?_Javascript_Regex - Fatal编程技术网

您可以使用javascript条件正则表达式语句吗?

您可以使用javascript条件正则表达式语句吗?,javascript,regex,Javascript,Regex,我对正则表达式有基本的了解 我使用javascript正则表达式过滤一些实时聊天评论,我的一些声明阻止了合法的讨论 这是因为你不允许在公开论坛上讨论某些事情,但你应该可以问他们有多少 例如,我使用以下方法过滤包含以下词语的注释: /(?=.*apple)|(\spear\s)|(香蕉)|(拉斯贝里)/i 是否可以使用条件元素创建regex语句 总之,如果字符串包含一些单词,我想对其进行过滤,但如果它包含其他单词,则不进行过滤,例如:“多少钱”或“成本”?我不确定是否可以在一个正则表达式中进行过

我对正则表达式有基本的了解

我使用javascript正则表达式过滤一些实时聊天评论,我的一些声明阻止了合法的讨论

这是因为你不允许在公开论坛上讨论某些事情,但你应该可以问他们有多少

例如,我使用以下方法过滤包含以下词语的注释:

/(?=.*apple)|(\spear\s)|(香蕉)|(拉斯贝里)/i
是否可以使用条件元素创建regex语句


总之,如果字符串包含一些单词,我想对其进行过滤,但如果它包含其他单词,则不进行过滤,例如:“多少钱”或“成本”?

我不确定是否可以在一个正则表达式中进行过滤,但您肯定可以这样将其拆分:

// Check if regex matches
const containsWords = (str, reg) => {
  return reg.test(str)
}

const filteredRegex = /apple|spear|banana|rasberry/g
const allowedRegex = /how much|cost/g

// If the amount of matches is bigger than 0, check if it contains allowed words
if (containsWords(comment, filteredRegex)) {
  if (containsWords(comment, allowedRegex)) {
    // Allowed
  } else {
    // Not allowed
  }
}

如果您不尝试将其作为单个RegExp来执行,那么它可能会更高效(当然也更容易阅读),而应该按照您所描述的那样执行;检查一个停止词列表和第二个列表。捷径将意味着第二个列表没有得到经常的评估。这在技术上是可能的,但非常不可行,因为你将不得不不断添加越来越多的条件来满足每个单词。比方说,如果您不想要
香蕉
,但
香蕉成本
是可以的,那么您还需要允许香蕉的
成本
。不仅如此,您可能还需要考虑两者之间的任何字距,
cost.*banana
banana.*cost
是您所需内容的简化版,但您可能需要白名单过滤器的过滤器。您添加的每个白名单项都将分解为过滤器和相应的过滤器