我有以下文字:
<script>window.location.replace(\"https:\\/\\/www.facebook.com\\/myuserprofilename\");</script>
我需要获取文本'myuserprofilename',但我无法正确使用正则表达式。 任何人都可以帮助我吗?
答案 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太不稳定而更加健壮。