2015-08-08 49 views
1

In continuation of a previous question I had:比赛的一切,但忽略特定单词

所以我在一个情况下,我只能使用正则表达式来选择一切,但一个特定的单词。出于举例的目的,这个词将是'foobar'。这是应该发生的事情:

这个例子的原始正则表达式是/\W*\b(?!foobar).+?\b\W*/g

match_highlighted.png

与正则表达式的问题是,之类的东西foobartestfoobar1234用foobar的东西后,与foobar的一起忽略。这不是我想要的。 test1234不应该被忽略,但是起始foobar应该,它不应该排除整个单词,因为它不是正好 foobar。这种情况发生的唯一场景是foobarfoobar,它忽略了两个预期的foobar。 一切其他应匹配毫无例外。

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

要注意的最后一件事是我不能使用向后看,只能向前看。有什么方法可以实现我想要的吗?谢谢!

+0

它怎么样都行不通? – Anonymous

+0

@匿名这给我一个“无限”的错误。为了帮助,我正在网站上测试我的正则表达式http://regexr.com/ – Flipybitz

+0

如果使用完全像这样,它不应该给出无限的错误,但是您是对的,它有问题。我可以发表一个答案,但我需要知道你首先使用哪种语言。对于误解,我的不好。 – Anonymous

回答

1

JavaScript正则表达式根本不允许使用此功能。限制较少的语言允许丢弃匹配并继续尝试匹配正则表达式。但是,JavaScript不允许这样做。因此,它不会跳过字符。它试图匹配每一个。然而,理论上,如果支持向后看,那么它仍然可能以复杂的方式出现,但它们都不是。

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

+0

这很烂...谢谢你的帮助:) – Flipybitz

+0

没问题,很高兴我能帮上忙。 – Anonymous

+0

唯一的方法是使用交替并忽略操作数的左侧。 https://regex101.com/r/rI5bH1/1 – hwnd