【问题标题】:Regex to not not match exactly against a list正则表达式与列表不完全匹配
【发布时间】:2015-11-27 15:44:28
【问题描述】:

我需要为“不是以下项目之一”的 html5 输入模式属性编写正则表达式。

我该怎么做

  • ab
  • aba

进入一个匹配任何不完全这些词之一的模式。

所以例如我想要的是什么

  • ab - 不匹配
  • abab - 匹配
  • bab - 匹配
  • b - 匹配
  • ab a - 匹配

换句话说,我想要(在 javascript 中)的正则表达式

! ['ab', 'aba', 'ba'].some(x => x === term)

【问题讨论】:

  • 只需反转过程,不要搜索不在列表中的模式。搜索它们,如果你找到一些告诉用户它不正确。更好的是,因为你发现了一些东西,你可以告诉他哪里出了问题。
  • 有很多不同风格的正则表达式;因此,如果您不告诉我们您将使用哪种语言实现此正则表达式,我们就无法真正为您提供肯定适合您的答案。既然您临时提到了 JavaScript,我将用它来标记它;但要认识到,您可能会因为您轻率地回答您将在哪种语言中使用此正则表达式而被否决。
  • @GeorgeStocker 这很公平,就像我在(已删除)评论中所说的那样,我没有用 js 标记它,因为我认为答案很简单,口味的差异并不重要。另外,我会注意到它在技术上是 html,而不是 js。 pattern 属性使用 javascript 引擎,但将其归类为 javascript 并不完全适合我。

标签: javascript regex


【解决方案1】:

您可以对锚点使用负前瞻:

^(?!(?:(aba|ab|ba)$)).*

RegEx Demo

(?!(?:(aba|ab|ba)$)) 是负前瞻,如果输入包含精确的单词 abababa,则匹配失败

【讨论】:

  • 哦,我明白了 - 你对 aba? 的使用让我很困惑。去/^(?!.*\b(ab|aba|ba)\b).*$/g
  • 是的,我只是将ab|aba 缩短为aba?
  • 现在看这个,其实不是相当正确的。请参阅我的编辑。基本上它与 ab a 不匹配,因为这不是确切的字符串
  • 谢谢。我设法将其简化为^(?!(?:(aba|ab|ba)$)).*
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多