说我们有一个字符串

blue|blue|green|blue|blue|yellow|yellow|blue|yellow|yellow|


我们想弄清楚单词“ yellow”是否出现在字符串的最后5个单词中,特别是通过返回包含这些出现次数的捕获组(如果有的话)。

有没有办法用正则表达式来做到这一点?

更新:我正在为正则表达式引擎提供一些规则。由于各种原因,我试图使用该引擎而不是不使用它,这是我的最后选择。

最佳答案

/\b(yellow)\|(?=(?:\w+\|){0,4}$)/g


这将为每个yellow|返回一个匹配,然后少于五个字(根据您对“ word”的定义)。假设序列总是以管道结尾;如果不是这种情况,您可能需要将其更改为:

/\b(yellow)(?=(?:\|\w+){0,4}\|?$)/g




编辑(以回应评论):在此解决方案中,“单词”的定义是任意的,并且实际上与实际使用情况不符。为了允许使用诸如“现实世界”之类的连字词,您可以使用以下代码:

/\b(yellow)\|(?=(?:\w+(?:-\w+)*\|){0,4}$)/g


...或者,对于这项特定工作,您可以将一个单词定义为除管道外的任何一个或多个字符:

/\b(yellow)\|(?=(?:[^|]+\|){0,4}$)/g

09-25 15:46