2013-07-12 70 views
2

我試圖匹配一個字符串與非破壞性空間( )給定一個變量,其中包含字符串與一個固定的空間。我正在查找的字符串是HTML鏈接/錨點中的文本,我正在使用Watir(請注意非破壞性空間)。Ruby正則表達式和字符串變量

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

似乎是由//和Regex.new創建的正則表達式之間的區別。

交互式Ruby說,符合下列條件(其中my_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

如果您創建一個只包含一個鏈接的頁面,請執行上述嘗試嗎?他們爲我工作,當我嘗試他們(同時使用Firefox的watir-webdriver)。 –

回答

1

使用交替:

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

此外,嘗試升級Ruby和寶石。我在Watir聽到奇怪的正則表達式問題,神奇地解決這個問題。

+0

我剛剛發現這個問題顯然與Regex無關。這個問題根源在於將一個字符串常量傳遞給一個方法。我將單獨發佈該問題。感謝您的建議。 – Mont

+0

盡我所能說這是IDE(RubyMotion)中的一個小故障。我之前使用的完全相同的代碼現在產生了不同的結果。雖然正則表達式/ Watir與正常空間(現在)匹配良好,但我將此標記爲答案,因爲交換空間'(|  )'似乎更加健壯。 – Mont

1

非破壞性空間是一個html實體,正則表達式afaik不會將其識別爲空間,因此您需要在匹配前轉換其中一個。

my_text = 'Some&nbsp;Text' 

換句話說,我不認爲正則表達式將永遠匹配空間「& NBSP;」。改變你的搜索字符串,或源文本,較容易...

+0

我在其他地方看到[[:space:]]會起作用。我不知道它是否應該/不應該。瘋狂的事情是/一些文本/工作得很好,但只要我在變量中粘貼「某些文本」,它就拒絕工作。 – Mont

相關問題