正则表达式Ruby-字符串后没有“ /”

时间:2019-01-20 13:49:30

标签: ruby-on-rails ruby regex string

我需要匹配一个包含2个单词vendor_tracks或shop_types中任何一个的url路径,但是商店类型后应跟一个'/'

我当前的REGEX是

  

//(供应商轨道|商店类型)/

,但如果包含shop_types / 22,则此匹配

我需要我的Regex来匹配以下内容:

  

/ shop_types?q%5Btrack_department

但不是下面的网址

  

/ shop_types / 27 / list_pinned_vendors

我的当前人接受两个,而我需要它只接受第一个。我尝试了许多不同的方法来排除“ shop_types”后跟/的情况,但总是会出现转义的反斜杠错误。有什么解决办法吗?或替代的REGEX

1 个答案:

答案 0 :(得分:2)

您可以使用环视条件创建自定义限制

>> str1 = '/shop_types?q%5Btrack_department'
=> "/shop_types?q%5Btrack_department"
>> str2 = '/shop_types/27/list_pinned_vendors'
=> "/shop_types/27/list_pinned_vendors"

>> str1.match?(/shop_types(?!\/)/)
=> true
>> str2.match?(/shop_types(?!\/)/)
=> false

此处(?!\/)为负向超前,表示/之后的shop_types字符不能为立即字符

请注意,字符串的结尾也将满足此条件,因为这意味着/后没有shop_types字符


  

我尝试了多种方法来排除“ shop_types”后跟/的问题,但总是会出现转义的反斜杠错误

您可以使用%r定义带有备用定界符的正则表达式

# here the condition has also been changed
# restriction is that / shouldn't occur anywhere after matching shop_types
>> str1.match?(%r{shop_types(?!.*/)})
=> true
>> str2.match?(%r{shop_types(?!.*/)})
=> false