为什么我的正则表达式在ruby中不起作用,而在其他地方却起作用



所以,我正试图让下面的正则表达式在ruby中工作,它似乎几乎在我使用的正则表达式编辑器中完成了我想要的操作,但当我在ruby中尝试它时,它没有返回匹配项?我对regex真的很陌生,可以在这方面使用一些帮助。

我的正则表达式如下:

string.match(/XIGSharedData(.*?});/)

基本上,我想做的是得到以下内容:

"XIGSharedData",[],{"raw":"{\"config\": ... about 5000 more characters.... };

我正试图从";{"在"原始"之前"到其匹配的结束"}";,我几乎在正则表达式编辑器中工作过,(我仍然在正则表达式编辑中从"XIGSharedData"开始捕获,它说它终止在更下面的正确位置,但在ruby中它说它什么都不捕获?我需要在ruby中为这个正则表达式做些其他事情来让它检测匹配吗?

非常感谢您的帮助。目前正在一个非常旧的代码库中工作,并试图不必重写所有内容,因为他们在大约两个月内就放弃了整个代码库。

我正试图从"{"在"原始"之前"到其匹配的结束"}";

我认为你试图解析<脚本>从Instagram上刮来的HTML标签?如果是这样,并且正如@tom lord所建议的那样,您应该使用适当的工具,而不是regexp。我能够从类似的js数据结构中解析你想要的文本,如下所示:

require 'open-uri'
require 'nokogiri'
require 'rkelly' # gem rkelly-remix
url = 'https://www.instagram.com/p/Cfee9XNubCg/?utm_source=ig_web_button_share_sheet' #an example which has script tag containing "XIGSharedData",[],{"raw..
html = URI.parse(url).open.read
doc = Nokogiri::HTML html
js_tag_text = doc.xpath("//script[contains(text(), 'XIGSharedData')]").text
ast = RKelly::Parser.new.parse js_tag_text
node_index = nil
ast.each_with_index do |node, i|
node_index = i if node.value == '"XIGSharedData"'
end
node_text = nil
ast.each_with_index do |node, i|
node_text = node.to_ecma if i == node_index + 3 # gets the node element from {"raw"..
end
puts node_text
=> {
"raw": "{"config":...
...}
} # matching closing '}'

相关内容

最新更新