2014-12-02 36 views
0

我有以下文字:內的文本刮子使用Ruby

<script>window.location.replace(\"https:\\/\\/www.facebook.com\\/myuserprofilename\");</script> 

我需要得到文本「myuserprofilename」,但我不能讓正則表達式正確。 任何人都可以幫助我嗎?

+1

在服務器端或客戶端? – 2014-12-02 13:37:07

+0

紅寶石,服務器端 – Tony 2014-12-02 13:42:10

+0

你使用'nokogiri'寶石嗎? – 2014-12-02 13:52:16

回答

1
string = '<script>window.location.replace(\"https:\\/\\/www.facebook.com\\/myuserprofilename\");</script>' 
puts string[/facebook.com\\\/(\w+)/, 1] # => myuserprofilename 
0

我很懷疑URL的格式。它看起來像檢查字符串的結果,而不像我們通常在HTML中看到的或處理HTML時的結果。

隨着字符串的清理,我希望它能在野外看到,下面是我們如何使用Nokogiri解析HTML,找到<script>標記的內容,然後訪問URL的最後部分路徑:

require 'nokogiri' 
require 'uri' 

doc = Nokogiri::HTML('<html><body><script>window.location.replace("https://www.facebook.com/myuserprofilename");</script></body></html>') 
url = doc.at('script').text[/\("(.+)"\)/, 1] # => "https://www.facebook.com/myuserprofilename" 
File.basename(URI.parse(url).path) # => "myuserprofilename" 

使用正則表達式定位特定的<script>標記比使用像Nokogiri這樣的解析器更容易出錯。一旦找到標籤,使用text即可輕鬆獲取其內容,然後使用URI的path方法輕鬆分解標籤。將它傳遞給File.basename會導致代碼重用現有經過良好測試的車輪,並且由於HTML和URL太易變而更加健壯。