我有类似的代码
(str =~ /regexp1/) && (str !~ /regexp2/) ? "aa" : "bb"
有没有办法在一次检查中合并两个正则表达式以获得更短的代码?
答案 0 :(得分:3)
/\A(?!.*#{regexp2}).*#{regexp1}/
答案 1 :(得分:1)
你可以用以下内容缩短它:
str[/regexp1/] && !str[/regexp2/] ? "aa" : "bb"
我在这里看到的其他解决方案对于需要阅读代码的人来说是一个不必要的噩梦。避免它们。
答案 2 :(得分:0)
你可以使用否定前瞻来做到这一点。
(?!.*regexp2)regexp1
需要 .*
以确保字符串中的任何位置都不存在regexp2
。对于前。
regexp2="bb"
和regexp1 ="cc"
。在这里,不需要.*
,因为它很简单。但是如果
regexp2="bb"
和regexp1="ccbbaa"
此处需要.*
以确保字符串中的bb
不存在。