【问题标题】:Match everything, but ignore specific word匹配所有内容,但忽略特定单词
【发布时间】:2015-08-08 10:38:43
【问题描述】:

In continuation of a previous question I had:

因此,我必须仅使用正则表达式来选择除特定单词之外的所有内容。出于示例的目的,单词将是“foobar”。这是应该发生的:

适用于本示例的原始正则表达式是 /\W*\b(?!foobar).+?\b\W*/g

该正则表达式的问题在于,诸如 foobartestfoobar1234 之类的内容以及 foobar 之后的任何内容都会与 foobar 一起被忽略。这不是我想要的。 test1234 不应该被忽略,但是开头的 foobar 应该,它不应该排除整个单词,因为它不是 完全 foobar。应该发生这种情况的唯一情况是foobarfoobar,它会按预期忽略两个 foobar。 Everything else 应无一例外地匹配。

The supposed duplicate 没有完成我的要求。

最后要注意的是,我不能使用lookbehind,只能使用lookahead。有什么方法可以实现我想要的吗?谢谢!

【问题讨论】:

  • 不行怎么办?
  • @Anonymous 这给了我一个“无限”错误。为了提供帮助,我正在网站 regexr.com 上测试我的正则表达式
  • 如果完全这样使用它不应该给出无限错误,但你是对的,它有问题。我可以发布答案,但我需要先知道您使用的是什么语言。很抱歉造成误会,我的错。
  • @Anonymous 我正在使用基于 javascript 的正则表达式引擎。 Regexr 是我发现的最好的沙箱,我可以使用的正则表达式类型。
  • @Anonymous 所以如果不可能,有人可以发布一个答案来解释它是怎么回事吗?在这种情况下,我会接受该回复作为答案。

标签: regex


【解决方案1】:

JavaScript 正则表达式根本不允许此功能。限制较少的语言允许删除匹配并继续尝试匹配正则表达式。但是,JavaScript 不允许这样做。因此,它永远不会跳过字符。它试图匹配每一个。如果支持后视,那么理论上仍然可能以一种复杂的方式进行,但它们也不支持。

如果没有这两种可能性,就没有万无一失的方法来确保正则表达式当前没有尝试匹配特定字符串的中间。

【讨论】:

  • 没问题,很高兴我能帮上忙。
  • 唯一的方法是使用交替并忽略操作数的左侧。 regex101.com/r/rI5bH1/1
  • @hwnd 对,但这需要过滤匹配项,这似乎是 OP 无法做到的问题。
猜你喜欢
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多