javascript - Javascript:用空格分割字符串,除非它用圆括号、单引号或方括号括起来
问题描述
我的方法: https ://regex101.com/r/vyKG1j/1
[\s]+(?!([^[]*])|([^\(]*\)))
不幸的是,这与封装括号 ex: (ab (cd)) 存在问题,我无法实现撇号搜索。
示例:"a b (a (a b)) [a b c d] 'test string' (a b)"
期望的结果:["a", "b", "(a (a b))", "[a b c d]", "'test string'", "(a b)"]
如果它也能处理这样的事情,那将是最好的。
示例:"a b abcd(a b)"
期望的结果:["a", "b", "abcd(a b)"]
正则表达式是这里最好的方法吗?
解决方案
问自己是否可以通过正则表达式解决的问题是 - Can I draw a finite automata (state machine) for this problem
。请记住,自动机没有任何存储功能。
现在让我们看看您的示例中具有嵌套结构的子字符串:
(a (a b))
您如何generic
为这种情况编写有限自动机?generic
我的意思是,自动机将如何发生多少次左remember
括号具有相同数量的匹配右括号遵循某种模式?
这就是为什么这个字符串模式不能单独使用just
正则表达式来解析。
特别是对于这个问题,因为它非常简单,我只需遍历字符串,保留一个堆栈来跟踪括号并引用字符来自己解析它。
推荐阅读
- swift - NSCollectionViewDelegate 方法没有被调用
- javascript - 如何避免在尝试从渲染访问数据时无法读取未定义的属性“地图”?
- java - 如何使用事务注释进行回滚
- .net - 调用 Excel.Worksheet.Open 函数时出现 COM 异常 HRESULT 0x800AC472
- android - 在 Android 上记录和发送触摸事件
- azure-devops - 如何将列表作为构建参数传递给 Azure DevOps Server 2019(本地)中的 YAML 模板?
- python - 如何在 Python 中更改水平条形图上标签的格式?
- python - Anaconda 3 不会在 Windows 10 上加载 BLAS 库,除非以管理员模式运行
- r - 将值切割为间隔并在 ggplot2 中绘制热图
- javascript - 如何解构这个数组