2013-07-12 3 views
2

Я пытаюсь сопоставить строку с неразрывным пространством ( ) с переменной, содержащей строку с обычным пространством. Строка, которую я ищу, это текст в HTML-ссылке/якоре, и я использую Watir (обратите внимание на неразрывное пространство).Ruby Regex и строковая переменная

<a onlick='DoSomthing()' href=''>Some&nbsp;Text</a> 

По-видимому, существует разница между регулярным выражением, созданным //, и Regex.new.

Интерактивная Рубин говорит, что справедливо следующее (где my_text = 'Some Text'):

/Some Text/ == Regexp.new(my_text) 

Но пока это возвращает True:

browser.link(:text, /Some Text/).exists? 

Это не:

browser.link(:text, Regexp.new(my_text)).exists? 

И это не делает:

browser.link(:text, /#{my_text}/).exists? 

Я также попытался следующие без везения:

Regexp.new(my_text.gsub(' ', '[[:space:]]')) 

Кто-нибудь знает, как я могу выполнить этот матч?

+0

Если вы создаете страницу, на которой есть только одна ссылка, выполните указанные выше действия? Они работали на меня, когда я их пробовал (при использовании watir-webdriver с Firefox). –

ответ

1

Используйте чередование:

browser.link(:text,/|&nbsp;/).exists? 

Кроме того, попробуйте обновить Ruby, и драгоценные камни. Я слышал, как странные проблемы с регулярным выражением в Ватире волнуются таким образом.

+0

Я только что обнаружил, что проблема, видимо, не имеет ничего общего с Regex. Проблема каким-то образом связана с передачей строковой константы методу. Я собираюсь опубликовать этот вопрос отдельно. Спасибо за предложение. – Mont

+0

Насколько я могу сказать, это был глюк в среде IDE (RubyMotion). Тот же самый код, который я использовал ранее, теперь производит разные результаты. В то время как Regex/Watir отлично сочетаются с обычным пространством (теперь), я отмечаю это как ответ, поскольку области обмена для '(|  )' кажутся более надежными. – Mont

1

Неразрывное пространство - это объект html, а regex afaik не распознает это как пробел, поэтому вам нужно преобразовать один или другой файл перед сопоставлением.

my_text = 'Some&nbsp;Text' 

другими словами, я не думаю, что регулярное выражение будет всегда соответствовать пространство «& NBSP;». изменить строку поиска, или исходный текст, в зависимости от того легче ...

+0

Я видел в другом месте, что [[: space:]] будет работать. Я не знаю, должно ли оно/не должно. Сумасшедшая вещь заключается в том, что/Some Text/работает отлично, но как только я вставляю «Some Text» в переменную, она отказывается работать. – Mont