【问题标题】:Dart get tracks element from String using RegExpDart 使用 RegExp 从字符串中获取曲目元素
【发布时间】:2020-11-29 06:42:01
【问题描述】:

当我从我们的网站 url 检索数据时,它会在其余 api 字段之一中返回此输出,并且我尝试查找是否包含 tracks 我从下面的 tracks 源中获取 url 是我需要的得到

String test = """
<div class=\"wp-playlist wp-audio-playlist wp-playlist-light\">\n
<div class=\"wp-playlist-current-item\"></div>\n
<p>\t\t<audio controls=\"controls\" preload=\"none\" width=\"\n\t\t\t\t1118\t\"\n\t\t>
</audio></p>\n<div class=\"wp-playlist-next\"></div>\n<div class=\"wp-playlist-prev\">
</div>\n<p>\t<noscript></p>\n<ol>\n<li>
<a href='https://www.caferilik.com/wp-content/uploads/2020/11/Anne-Baba-Biz-Suçluyuz-Muhafazakar-Ailelerde-Kuşak-Çatışması-Sesli-Kitap-www.caferilik.com_.mp3'>
Anne Baba Biz Suçluyuz - Muhafazakar Ailelerde Kuşak Çatışması (Sesli Kitap) www.caferilik.com<
/a></li>\n</ol>\n<p>\t</noscript><br />\n\t
<script type=\"application/json\" class=\"wp-playlist-script\">
{\"type\":\"audio\",\"tracklist\":true,\"tracknumbers\":true,\"images\":true,\"artists\":true,
\"tracks\":[{\"src\":\"https:\\/\\/www.caferilik.com\\/wp-content\\/uploads\\/2020\\/11\\/Anne-Baba-Biz-Su\\u00e7luyuz-Muhafazakar-Ailelerde-Ku\\u015fak-\\u00c7at\\u0131\\u015fmas\\u0131-Sesli-Kitap-www.caferilik.com_.mp3\",
\"type\":\"audio\\/mpeg\",\"title\":\"Anne Baba Biz Su\\u00e7luyuz - Muhafazakar Ailelerde Ku\\u015fak \\u00c7at\\u0131\\u015fmas\\u0131 (Sesli Kitap) www.caferilik.com\",\"caption\":\"\",
\"description\":\"\\\"Anne Baba Biz Su\\u00e7luyuz - Muhafazakar Ailelerde Ku\\u015fak \\u00c7at\\u0131\\u015fmas\\u0131 (Sesli Kitap) www.caferilik.com\\\".\",\"meta\":{\"length_formatted\":\"2:28:02\"},
\"image\":{\"src\":\"https:\\/\\/www.caferilik.com\\/wp-includes\\/images\\/media\\/audio.png\",\"width\":48,\"height\":64},\"thumb\":
{\"src\":\"https:\\/\\/www.caferilik.com\\/wp-includes\\/images\\/media\\/audio.png\",\"width\":48,\"height\":64}}]}</script>\n</div>\n
""";

test = test.replaceAll('\n', '').replaceAll('\t', '').replaceAll('\\', '');

我可以找到很多RegExp 来从字符串中获取link,但我需要获取tracks 的来源

【问题讨论】:

  • 您想要得到的确切输出是什么?
  • @WiktorStribiżew 从轨道源获取mp3 文件链接
  • 我怀疑正则表达式在这里效果最好,您需要 1) 一个 HTML 解析器来获取正确的脚本标记值和 2) JSON 解析器来获取正确的值。我试图想出一个正则表达式,但它不是很好,new RegExp(r'&lt;script[^&gt;]*&gt;[^&lt;]*?"tracks"[^&lt;]*?"(http\S*?\.mp3)"[^&lt;]*?&lt;/script&gt;').firstMatch(test)[1]。嗯,[^&lt;]*?&lt;/script&gt; 看起来是多余的,但是模式真的很丑。
  • @DolDurma 示例代码看起来像 Java。这是为 Dart/Flutter=JS 设计的吗?
  • 感谢您接受答复。如果我的回答有帮助,也请点赞。

标签: regex flutter dart


【解决方案1】:

使用

"tracks":\[{"src":"([^"]+)

proof。当你把它放在代码中时,所需的值将在第一组中。

说明

--------------------------------------------------------------------------------
  "tracks":                '"tracks":'
--------------------------------------------------------------------------------
  \[                       '['
--------------------------------------------------------------------------------
  {"src":"                 '{"src":"'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [^"]+                    any character except: '"' (1 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1

【讨论】:

    猜你喜欢
    • 2021-01-07
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2017-08-01
    • 2013-01-02
    • 2014-09-20
    • 1970-01-01
    • 2019-01-28
    相关资源
    最近更新 更多