我找到了这个here的答案,但是它在php中。
我想匹配一个像[123, "hehe", "lala"]
这样的数组,但前提是该数组语法正确。
我制作了此正则表达式/\["?.+"?(?:,"?.+"?)*\]/
。
问题在于,如果输入为[123, "hehe, "lala"]
,则表示正则表达式匹配,但是语法不正确。
如何仅在数组语法正确的情况下使其匹配?
我的问题是匹配第一个"
时需要第二个"
。
编辑:我只尝试使用数组中的字符串和数字来完成此操作。
答案 0 :(得分:2)
您可以尝试以下正则表达式:/\[((\d+|"([^"]|\\")*?")\s*,?\s*)*(?<!,)\]/
每个项目都应该
"([^"]|\\")*?"
:以“开头和结尾,除”以外的任何内容。如果包含“,则应将其转义(\“)。
\d+
:一个数字
每个项目应在
之后 \s*,?\s*
:逗号前后带有任意数量的空格。
并且在右括号之前不应使用逗号:(?<!,)
答案 1 :(得分:1)
您必须具有两个(或多个)单独的表达式(使用|
运算符)。
所以会是这样:
/\[\s*("[^"]*"|[0-9]+)(\s*,\s*("[^"]*"|[0-9]+))*\s*\]/
(您可能还想在开头使用^
,在结尾使用$
,以确保在数组/^...snip...$/
之前/之后没有其他内容:从头到尾的字符串。)
如果您需要带指数的浮点数,请添加句点和'e'字符:[0-9.eE]+
(这就是为什么我不使用\d+
的原因,因为在这种情况下只允许使用数字。)要确保数字有效,显然要复杂得多(符号,带/不带符号的指数,仅在小数点之前或之后的数字...)
您还可以支持单引号字符串。那也是一个单独的表达式:'[^']*'
。
您可能也想在方括号之前和之后都留有空格(开始:/^\s*\[...
,结束:...\]\s*$/
)。
最后,如果您想真正支持JavaScript字符串,则需要添加对反斜杠的支持。像这样的东西:("([^"]|\\.)*")
。
注意
您的.+
表达式也将与"
和,
匹配,并且如果没有^
和$
,则如下所示的数组将与您的表达式完全匹配:>
This Array ["test", 123, true, "this"] Here