使用ruby在文本内部刮取子字符串

时间:2014-12-02 13:35:36

标签: ruby-on-rails ruby regex

我有以下文字:

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

我需要获取文本'myuserprofilename',但我无法正确使用正则表达式。 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我怀疑网址的格式。它看起来像检查字符串的结果,而不是我们通常在HTML中或处理HTML时看到的内容。

将字符串清理干净,我希望它能在野外看到,我们如何使用Nokogiri解析HTML,找到<script>标记&#39 ; s内容,然后访问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太不稳定而更加健壮。