正则表达式匹配没有字符的单词

时间:2016-05-14 01:44:25

标签: javascript regex

这就是问题:

我们有包含2个单词的字符串,例如:

["bed time", "red carpet", "god father", "good game"]

正则表达式应与god fathergood game匹配,因为它们中的每个都有一个不包含字母e(上帝和好)的单词,并且它不应与{{1}匹配}和“red carpet”,因为字符串中的两个单词都有字母bed time

我在考虑e,但它匹配所有这些字符串。

4 个答案:

答案 0 :(得分:1)

这适用于您的情况:

/.*\b[^\se]+\b.*/gi

<强> Regex101

答案 1 :(得分:0)

使用此:

/^(\w+ [^e]+|[^e ]+ \w+)$/i

它搜索以下任何一个:

  • 可能包含&#39; e&#39;和不包含&#39;
  • 的单词
  • 不包含&#39; e&#39;和可能包含&#39;
  • 的单词

请注意,[a-z]可用于代替\w,如果这是解决方案所需的内容。假设这些例子真正代表了输入,那么要么应该充分发挥作用。

此代码针对输入数组测试正则表达式:

phrases = ["bed time", "red carpet", "god father", "good game"]
phrases.each do |phrase|
  puts "#{phrase}" if phrase.match(/^(\w+ [^e]+|[^e ]+ \w+)$/i)
end

结果是:

god father
good game

答案 2 :(得分:0)

/\b([^ e])+\b/gi

这将选择不包含e | E的所有单词。

答案 3 :(得分:0)

/\b[^\We]+\b/g
  • \W 表示不是“单词”字符。
  • ^\W 表示“单词”字符。
  • [^\We] 表示“单词”字符,但不是“e”。

查看实际效果:word without e

正则表达式的“and”运算符

顺便说一句,我认为这种模式可以用作正则表达式的“and”运算符。

一般来说,如果:

  • A = not a
  • B = not b

然后:

[^AB] = not(A or B) 
      = not(A) and not(B) 
      = a and b

差异集

所以,如果我们想在正则表达式中实现 difference set 的概念,我们可以这样做:

a - b = a and not(b)
      = a and B
      = [^Ab]