我获取HTML页面的源代码并将其放在字符串中。
我想要做的是获取驻留在源代码中不同时间的JavaScript函数的“参数”。我想得到第一个结果。
这是函数的示例,其中?
表示我想要的文本的字符:
asdf({"id":?????,"uid":"?????","user":{"username":"?????","permalink":"?????"}});
当"uid":
字符串具有可变长度和字符时,如何在"uid":"????"
"?"
后获取字符串?
例如,我想从该字符串中获取文本eD9od0fopdh5
,知道它位于文本"uid":
之后。
asdf({"id":128999175,"uid":"eD9od0fopdh5","user":{"username":"sportshistory","permalink":"sportshistory"}})
答案 0 :(得分:1)
由于您在 ruby 中使用JSON哈希作为字符串,因此当您不想使用任何外部gem时,shell将获得uid
,如下所示:
string = 'asdf({"id":128999175,"uid":"eD9od0fopdh5","user":{"username":"sportshistory","permalink":"sportshistory"}})'
uid = string =~ /"uid":"([a-zA-Z0-9]+)"/ && $1
"eD9od0fopdh5"
答案 1 :(得分:1)
您可以从json构建哈希
require 'json'
str= 'window.push({"id":"X","uid":"X","user":{"username":"X","permalink":"X"}});'
json_str= str[12..-3]
p json_str
hash= JSON.parse(json_str)
p hash['uid']
答案 2 :(得分:1)
我会这样做:
require 'json'
str = 'asdf({"id":128999175,"uid":"eD9od0fopdh5","user":{"username":"sportshistory","permalink":"sportshistory"}})'
data = str[/\((.+)\)/, 1]
# => "{\"id\":128999175,\"uid\":\"eD9od0fopdh5\",\"user\":{\"username\":\"sportshistory\",\"permalink\":\"sportshistory\"}}"
params = JSON.parse(data)
# => {"id"=>128999175,
# "uid"=>"eD9od0fopdh5",
# "user"=>{"username"=>"sportshistory", "permalink"=>"sportshistory"}}
params['uid'] # => "eD9od0fopdh5"
那会得到它。
如果你想改变它:
params['uid'] = 'foo'
params # => {"id"=>128999175, "uid"=>"foo", "user"=>{"username"=>"sportshistory", "permalink"=>"sportshistory"}}
如果你想再次使用JSON:
params.to_json # => "{\"id\":128999175,\"uid\":\"foo\",\"user\":{\"username\":\"sportshistory\",\"permalink\":\"sportshistory\"}}"
我使用data = str[/\((.+)\)/, 1]
的原因是它会原谅参数大小或顺序的变化。只要数据包含在JavaScript函数的参数中,模式就会将其拾取。