Ruby 如何在Regexp中捕获某个单词之前的几个单词

Ruby 如何在Regexp中捕获某个单词之前的几个单词,ruby,regex,Ruby,Regex,从字符串“美妙的两晚、三晚或六晚住宿两餐”中,我想捕获并在单词'night'之前说出5个单词。 在这个例子中,我想得到['fabric'、'two'、'three'、'six'] 我当前使用的是s.scan(/(?:\w+/),它返回标记化数组: [“非常好”、“两个”、“三个”、“或”、“六个”、“晚上”、“住宿”、“两个”、“一起”、“吃饭”] 然后我通过索引找到“夜”这个词。但是我想知道regexp是否也可以完成这一步。您可以使用/(?:\w+\w+{5}(?=night)/获得前面的5个

从字符串
“美妙的两晚、三晚或六晚住宿两餐”
中,我想捕获并在单词'night'之前说出5个单词。 在这个例子中,我想得到
['fabric'、'two'、'three'、'six']

我当前使用的是
s.scan(/(?:\w+/)
,它返回标记化数组:

[“非常好”、“两个”、“三个”、“或”、“六个”、“晚上”、“住宿”、“两个”、“一起”、“吃饭”]


然后我通过索引找到“夜”这个词。但是我想知道regexp是否也可以完成这一步。

您可以使用
/(?:\w+\w+{5}(?=night)/
获得前面的5个单词,它返回
“难以置信的2、3或6”
。然后,您可以继续将其拆分为单词(不知道如何将它们放在同一个正则表达式中)。

只需在扫描中添加正向前瞻,以确保单词“night”如下所示:

s.scan(/(?:\w+)(?=.*night)/)

#=> ["Fabulous", "two", "three", "or", "six"]