如何在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
相关产品推荐
相关产品推荐

