【问题标题】:Flutter/Dart: Regex Replace with $2?Flutter/Dart:正则表达式替换为 2 美元?
【发布时间】:2020-07-06 10:45:05
【问题描述】:

我正在尝试使用 Dart 中的 replaceall 正则表达式方法从 Facebook 图片 URL 中获取 ID 号。在下面的代码中,我应该使用什么来代替 $2?我需要的 id 号在 "asid=" 和 "&height" 之间。

void main() {
 String faceavatar = 'https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=10153806530149154&height=50&width=50&ext=1596623207&hash=AeSi1yDvk8TCqZql';
      String currentavatar = faceavatar.replaceAll(RegExp('(.*asid=)(\d*)height.*'), $2;
  print(currentavatar);
}

【问题讨论】:

    标签: regex flutter dart replaceall


    【解决方案1】:

    你可以试试:

    .*?\basid\b=(\d+).*
    

    上述正则表达式的解释:

    • .*? - Lazily 匹配除 asid 之前的换行符以外的所有内容。
    • \basid\b - 从字面上匹配 asid\b 代表单词边界。
    • = - 从字面上匹配 =
    • (\d+) - 表示第一个捕获组匹配数字一次或多次。
    • .* - 贪婪除了换行零次或多次之外的所有内容。
    • $1 - 对于替换部件,您可以使用$1match.group(1)

    你可以在here.找到上述正则表达式的演示

    dart 中的示例实现:

    void main() {
     String faceavatar = 'https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=10153806530149154&height=50&width=50&ext=1596623207&hash=AeSi1yDvk8TCqZql';
          String currentavatar = faceavatar.replaceAllMapped(RegExp(r'.*?\basid\b=(\d+).*'), (match) {
      return '${match.group(1)}';
    });
      print(currentavatar);
    }
    

    您可以在here.中找到上述实现的示例运行

    【讨论】:

      【解决方案2】:

      只是得到帮助:

      (?<=(asid=))(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|]| )+?(?=(&height))

      输出:10153806530149154

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-25
        • 2021-12-30
        • 1970-01-01
        • 2012-05-05
        相关资源
        最近更新 更多