List<dynamic> evalList(String text) {
var r = [];
var i = 0;
var isList = false;
void parseStart() {
var m = RegExp(r'^\s*\[\s*').firstMatch(text);
while (m != null) {
// print('start before: ' + text);
if (i != 0) {
r.add([]);
isList = true;
}
i++;
text = text.substring(m.end);
// print('start after: ' + text);
m = RegExp(r'^\s*\[\s*').firstMatch(text);
}
} void parseEnd() {
var m = RegExp(r'^\]\s*,?\s*').firstMatch(text);
while (m != null) {
// print('end before: ' + text);
if (i > 2) {
var b = r[r.length - 2];
b.add(r.removeLast());
} else {
isList = false;
}
i--;
text = text.substring(m.end);
// print('end after: ' + text);
m = RegExp(r'^\]\s*,?\s*').firstMatch(text);
}
} while (text.isNotEmpty) {
RegExpMatch m;
// 匹配开头
parseStart(); // 匹配结束
parseEnd(); // 匹配item
m = RegExp(r'\s*([^\[\],]*)\s*,?').firstMatch(text);
if (m != null) {
var v = m.group(1);
if (v.isNotEmpty) {
if (isList) {
r.last.add(v);
} else {
r.add(v);
}
} text = text.substring(m.end);
}
}
return r;
} void main() {
var ar = '''[1,['h', ['w'], 'a'], 'x', [[],[], [],1],2]''';
print(evalList(ar)); // [1, ['h', ['w'], 'a'], 'x', [[], [], [], 1], 2]
}

dart 匹配基本数组的更多相关文章

  1. MongoDB 学习笔记之 匹配完整数组

    匹配完整数组: 创建一个集合(包含数组) db.ArrayTest.insert({name: "Sky" , address: [{"street" : &q ...

  2. Dart语言学习(六) Dart 列表List数组

    创建List : var list = [1,2,3,"Dart",true]; 创建不可变List : var list = const [1,2,3,"Dart&qu ...

  3. dart 匹配基本map

    var map_start = RegExp(r'^\s*\{\s*'); var map_end = RegExp(r'^\}\s*(,)?\s*'); var hasComma = true; M ...

  4. mongodb 内嵌数组查询问题: 如何限定返回与条件匹配的数组

    原文地址:https://segmentfault.com/q/1010000002943721

  5. php数组和正则表达式的替换拆分匹配所有

    正则表达式 $s = "a1s2d3f1g5f";//echo preg_replace("/\d/","#",$s);  //替换 //$ ...

  6. js两个数组对象通过相同元素匹配筛选

    let a = [ { name: 'joy', year: '24' }, { name: 'eve', year: '25' } ] let b = [ { name: 'joy', city: ...

  7. DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器

    DART: a fast and accurate RNA-seq mapper with a partitioning strategyDART:使用分区策略的快速准确的RNA-seq映射器 Abs ...

  8. MongoDB 数组

    MongoDB是文档型数据库,每个文档(doc)表示数据的一项记录.相比关系型DB的row只能使用简单的数据类型,doc能够使用复杂的数据类型:内嵌doc,数组.MongoDB的数组是一系列元素的集合 ...

  9. js去除数组重复项

    /** * js去除数组重复项 */ //方法一.使用正则法 // reg.test(str),匹配得到就返回true,匹配不到返回false var arr = ["345",& ...

随机推荐

  1. 不识Netty真面目,只缘未读此真经

    Netty官网:https://netty.io/ Netty is an asynchronous event-driven network application framework for ra ...

  2. Linux内核poll/select机制简析

    0 I/O多路复用机制 I/O多路复用 (I/O multiplexing),提供了同时监测若干个文件描述符是否可以执行IO操作的能力. select/poll/epoll 函数都提供了这样的机制,能 ...

  3. 性能优化(CSS优化)

    高质量的CSS代码体现在三个方面:可读性和可维护性和高性能.对于"前端工程师"来说如何平衡"追求高性能"和"可维护性"是很值得思考的问题. ...

  4. OpenStack (glance 镜像服务)

    glance介绍 glance 提供云虚拟机上的服务镜像(Image)功能,该模块可看成车间里的模具生产部门,其功能包括虚拟机镜像的查找.注册和检索等.该模具最基本的使用方式就是在为云虚拟机实例提供安 ...

  5. 省市县sql

    create table SYS_AREA ( ID NUMBER(18) not null, AREA_CODE VARCHAR2(50) not null, AREA_NAME VARCHAR2( ...

  6. 深复制VS浅复制(MemberwiseClone方法介绍)

    MemberwiseClone方法,属于命名空间System,存在于程序集 mscorlib.dll中.返回值是System.Object.其含义是:创建一个当前object对象的浅表副本. MSDN ...

  7. Think in Java 第三章操作符

    Think in Java 第三章操作符 赋值 对象赋值 ​ 我们真正操作的是对对象的引用.所以倘若"将一个对象赋值给另一个对象",实际上是将"引用"从一个地方 ...

  8. Flink-v1.12官方网站翻译-P023-The Broadcast State Pattern

    广播状态模式 在本节中,您将了解如何在实践中使用广播状态.请参考状态流处理,了解状态流处理背后的概念. 提供的API 为了展示所提供的API,我们将在介绍它们的全部功能之前先举一个例子.作为我们的运行 ...

  9. JVM之JVM体系结构

    JVM是运行在操作系统之上的,它与硬件没有直接的交互 下图运行时数据区灰色代表线程私有,亮色(方法区和堆)代表所有线程共享. 1.类装载器ClassLoader 负责加载class文件,class文件 ...

  10. Codeforces Global Round 9 B. Neighbor Grid

    题目链接:https://codeforces.com/contest/1375/problem/B 题意 给出一个 $n \times m$ 的方阵,每个方格中有一个非负整数,一个好方格定义如下: ...