我试图使用Dart中的replaceall regex方法仅从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);
}

最佳答案

您可以尝试:

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

  • regex - Flutter/Dart:Regex用$ 2代替吗?-LMLPHP
    您可以在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.中找到上述实现的示例运行

    10-08 06:47