在Ruby中使用积极的先行

jos*_*ott 2 ruby regex lookahead

我正在为以下短语变体写一个正则表达式:

  • "购物车总价大于$ 5.00"
  • "购物车总价不到$ 5.00"
  • "购物车总数大于5.00"(注意数字中没有$ ...这是失败的)

我抓住了两件事:"更大"或"更少"这个词和金额.我想要记录金额是否有美元符号,但这就是绊倒我的原因.

这是我的正则表达式:

/^.*(?=cart total).*(?=(greater|less)).*(?=\$([0-9.]+))/
Run Code Online (Sandbox Code Playgroud)

这个:

"cart total is greater than $5.00".match(/^.*(?=cart total).*(?=(greater|less)).*(?=\$([0-9.]+))/)
Run Code Online (Sandbox Code Playgroud)

让我"更大"和5.00但是这个:

    "cart total is greater than 5.00".match(/^.*(?=cart total).*(?=(greater|less)).*(?=\$([0-9.]+))/)
Run Code Online (Sandbox Code Playgroud)

让我"更大"和""

我意识到前瞻是专门搜索组中的"$"因此将其取出导致它找不到金额,但我很乐意看到如何修改它以查找金额而不管是否存在"$"或不.

谢谢!

Sab*_*san 5

在这种情况下,对我来说,预测是不必要的.我删除了那些.并添加\$?了可选的美元符号.

^.*?cart total.*?(greater|less).*?\$?([0-9.]+)
Run Code Online (Sandbox Code Playgroud)