当我有一个非常长的正则表达式时,就像黄瓜步骤定义一样,最好的换行方式是什么?
例如,我想要像:
When /^I have a very long step definition here in my step definition file$/ do
...
end
分成两行(这不起作用:)
When /^I have a very long step definition here in /\
/my step definition file$/ do
...
end
如果您专门用于黄瓜,使用cucumber expressions是正则表达式的绝佳选择
答案 0 :(得分:14)
您可以将verbose regex与/x
修饰符一起使用,但是您需要明确显示空格,否则将忽略它们。另一个优点是,这允许您评论您的正则表达式(如果它很长,可能是一个好主意):
/^ # Match start of string
I[ ]have[ ]a[ ]very[ ]long[ ]
step[ ]definition[ ]here[ ]
in[ ]my[ ]step[ ]definition[ ]file
$ # Match end of string
/x
答案 1 :(得分:1)
怎么样?
/a\
b/
# => /ab/
答案 2 :(得分:1)
字符串到正则表达式转换怎么样?你会丢失语法高亮,但我会说它不是太糟糕了?
When( Regexp.new(
'^My long? regex(?:es) that are '\
'(?:maybe ) broken into (\d+) lines '\
'because they (?:might )be non-readable otherwise$'
)) do |lines|
...
end
# => /^My long? regex(?:es) that are (?:maybe ) broken into (\d+) lines because they (?:might )be non-readable otherwise$/
答案 3 :(得分:-2)
我知道你想在Ruby中使用它,但我可以举例说明如何在Perl
中实现它。我真的认为你也可以在Ruby中使用这个想法。
my $re1 = "I have a very long step definition here in";
my $re2 = "my step definition file";
if ( $line =~ m/^$re1 $re2$/i ) {
...
}
这个想法是将正则表达式保存到变量中并在正则表达式中写入变量。