2

我正在尝试形成一个正则表达式,它将匹配一个“看起来”像数组的字符串。

  • 必须以[,{(
  • 必须以], }, 或)
  • 开始和结束是否使用相同的括号无关紧要(例如(....}很好)
  • 项目以逗号分隔
  • 所有空白类型都被忽略
  • 必须接受空数组

我最初想出的是

'/\s*[\[|\{|\(]\s*\w+\s*[,\s*\w+]*\s*[\]|\}|\)]\s*/'

不幸的是,这不接受空数组。所以我尝试了另一个

'/\s*[\[|\{|\(][\s*\w+\s*]?[,\s*\w+]*\s*[\]|\}|\)]\s*/'`

这个允许空数组,但也允许在左括号后以逗号开头的数组(例如[, item, item])。

我目前正在做的是使用两个不同的正则表达式并检查一个或另一个匹配。另一个正则表达式类似于我在这里提到的第一个,但只允许在打开和关闭标记之间出现零个或多个空白字符。

4

2 回答 2

3

为了清楚起见,我在下面使用了空格和换行符。应该删除它们或使用忽略它们的正则表达式选项。我发现以这种方式开发正则表达式更容易。

[\[\{\(]
    \s*
    (
    |
        \w+\s*
        (,\s*\w+\s*)*
    )
[\]\}\)]

这尚未经过测试,但我希望它非常接近。

于 2012-07-15T05:34:53.067 回答
1

尝试将空数组视为特殊情况,或者使用您已经拥有的填充数组正则表达式。类似(未经测试):

'(?:[\({[]\s*[\)}\]]|/\s*[\[|\{|\(]\s*\w+\s*[,\s*\w+]*\s*[\]|\}|\)]\s*)/'
于 2012-07-15T05:26:17.670 回答