You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中将JavaScript格式字符串转换为Dart Map?

将JS变量声明字符串转换为Dart Map的方法

针对你给出的这类简单JS变量声明字符串,完全可以通过正则匹配提取键值对的方式快速转换为Dart Map,以下是具体实现:

基础场景实现(值为无转义双引号的字符串)

如果你的字符串里都是var 键 = "值";这种格式,且值里没有转义的双引号,可以用下面的代码:

void main() {
  const jsVarString = 'var key1 = "abcd"; var key2 ="xyz";';
  
  // 匹配变量声明的正则,兼容键值前后的空格差异
  final regExp = RegExp(r'var\s+(\w+)\s*=\s*"([^"]+)"\s*;');
  
  final resultMap = <String, String>{};
  
  // 遍历所有匹配到的键值对
  for (final match in regExp.allMatches(jsVarString)) {
    final key = match.group(1)!; // 提取键名
    final value = match.group(2)!; // 提取值
    resultMap[key] = value;
  }
  
  print(resultMap); // 输出: {key1: abcd, key2: xyz}
}

进阶场景(值包含转义双引号)

如果值里存在转义的双引号(比如var key3 = "a\"b\"c";),需要调整正则来支持转义字符,同时处理转义后的引号:

void main() {
  const jsVarString = 'var key1 = "abcd"; var key2 ="xyz"; var key3 = "a\\"b\\"c";';
  
  // 支持匹配转义双引号的正则
  final regExp = RegExp(r'var\s+(\w+)\s*=\s*"((?:\\.|[^"])+)"\s*;');
  
  final resultMap = <String, String>{};
  
  for (final match in regExp.allMatches(jsVarString)) {
    final key = match.group(1)!;
    var value = match.group(2)!;
    // 把转义的双引号还原为普通双引号
    value = value.replaceAll(r'\"', '"');
    resultMap[key] = value;
  }
  
  print(resultMap); // 输出: {key1: abcd, key2: xyz, key3: a"b"c}
}

注意事项

  • 以上方案仅适用于简单的变量声明场景,如果你的JS字符串包含复杂逻辑(比如表达式赋值、注释、多行声明、非字符串类型值),正则就无法处理了,这种情况建议使用专门的JS解析库做语法解析。
  • 如果值是数字、布尔值等类型,可以在提取后额外做类型转换。

内容的提问来源于stack exchange,提问作者Jeet Vyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:06:31