【问题标题】:Get text from a string knowing its position?从知道其位置的字符串中获取文本?
【发布时间】:2014-02-01 12:59:27
【问题描述】:

我得到一个 HTML 页面的源代码并将它放在一个字符串中。

我想要做的是获取不同时间驻留在源代码中的 JavaScript 函数的“参数”。我想得到第一个结果。

这是一个函数示例,其中?表示我要获取的文本的字符:

asdf({"id":?????,"uid":"?????","user":{"username":"?????","permalink":"?????"}});

"?" 字符串具有可变长度和字符时,如何在"uid":"????" 中获取"uid": 之后的字符串?

例如,我想从该字符串中获取文本 eD9od0fopdh5,知道它在文本 "uid": 之后。

asdf({"id":128999175,"uid":"eD9od0fopdh5","user":{"username":"sportshistory","permalink":"sportshistory"}})

【问题讨论】:

  • “X”的所有值都相同吗?还是更像window.push({"id":A,"uid":"B","user":{"username":"C","permalink":"D"}});
  • 1 秒,现在安装 ruby​​
  • 所有的X都不同,长度也不同
  • 我看不到代码,所以我猜你什么也没写。在我们介入并为您解决问题之前,我们希望看到您已经付出了一些努力来回答您的问题。这就是 Stack Overflow 的方式。

标签: ruby json string


【解决方案1】:

由于您在 ruby 中使用 JSON 哈希作为字符串,当您不想使用任何外部 gem 时,您的 shell 得到uid 如下:

string = 'asdf({"id":128999175,"uid":"eD9od0fopdh5","user":{"username":"sportshistory","p‌​ermalink":"sportshistory"}})'
uid = string =~ /"uid":"([a-zA-Z0-9]+)"/ && $1
"eD9od0fopdh5"

【讨论】:

  • window.push({"id":X,"uid":"X","user":{"username":"X","permalink":"X"}}) ;是我要查找的文本,我必须从中获取变量 Xs
  • @user1677678 来自哪个?我已经更新了答案,您只需要正确设置 X 变量,即可选择一个值('uid' == X 用于 window 数组。
  • @user1677678 一些额外的 =)
  • @user1677678 我明白了,但是您需要解释在哪种情况下X 是可变的,并且其中“X”是“X”。我在你的情况下看到 'uid'=='X' 不是 X
  • 重新编辑了问题添加和我想要它做的例子
【解决方案2】:

您可以从 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']

【讨论】:

    【解决方案3】:

    我会这样做:

    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 函数的参数中,模式就会选择它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多