首页 > 解决方案 > 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)"]

正则表达式是这里最好的方法吗?

标签: javascriptregex

解决方案


问自己是否可以通过正则表达式解决的问题是 - Can I draw a finite automata (state machine) for this problem。请记住,自动机没有任何存储功能。

现在让我们看看您的示例中具有嵌套结构的子字符串: (a (a b))

您如何generic为这种情况编写有限自动机?generic我的意思是,自动机将如何发生多少次左remember括号具有相同数量的匹配右括号遵循某种模式?

这就是为什么这个字符串模式不能单独使用just正则表达式来解析。

特别是对于这个问题,因为它非常简单,我只需遍历字符串,保留一个堆栈来跟踪括号并引用字符来自己解析它。


推荐阅读