2014-10-05 5 views
1

Следующая строка кода правильно выбирает «Джо Пупкин» из выпадающего списка:Как передать регулярное выражение в качестве аргумента функции?

browser.select_list(:id => "ListOwnerID").option(:text => /Joe Bloggs/).select # edited: added '.select' 

Как передать имя владельца в качестве переменной «list_owner»?

Что-то вроде:

def set_list_owner(list_owner) 
    browser.select_list(:id => "ListOwnerID").option(:text => /list_owner/).select 
end 

Использование:

set_list_owner("Joe Bloggs") 

ответ

3

Вы можете использовать Regexp::new:

re_string = '\d' 
Regexp.new(re_string) =~ 'abc 123' 
# => 4 

Alternative Cary Swoveland предложил (регулярное выражение интерполяции):

/#{re_string}/ 

def set_list_owner(list_owner) 
    browser.select_list(:id => "ListOwnerID").option(:text => Regexp.new(list_owner)) 
end 

set_list_owner("Joe Bloggs") 

Если вы хотите, чтобы соответствовать строке буквально, вместо того, чтобы интерпретировать как регулярное выражение, используйте Regexp::escape:

Regexp.new(Regexp.escape(list_owner)) 
+1

В качестве альтернативы, 'регулярное выражение =/# {re_string}/=>/\ d/'. –

+0

@CarySwoveland, Хорошее решение. Я добавил вашу альтернативу ответам. Спасибо. – falsetru

+0

Я использовал 'Regexp.new (list_owner)'. По крайней мере, я могу понять это :) – OldGrantonian