[英]Parsing array syntax using regex in javascript
我在这里找到了答案,但是它在php中。
我想匹配[123, "hehe", "lala"]
这样的数组,但[123, "hehe", "lala"]
是数组语法正确。
我做了这个正则表达式/\\["?.+"?(?:,"?.+"?)*\\]/
。
问题是,如果输入为[123, "hehe, "lala"]
,则正则表达式匹配,但是语法不正确。
如何仅在数组语法正确的情况下使其匹配?
我的问题是使第二个"
匹配第一个"
时需要。
编辑:我只是想只用数组中的字符串和数字来做到这一点。
您可以尝试使用此正则表达式: /\\[((\\d+|"([^"]|\\\\")*?")\\s*,?\\s*)*(?<!,)\\]/
每个项目应
"([^"]|\\\\")*?"
:以“开头”和“结尾”,除“之外”。 如果包含“,则应将其转义(\\“)。
\\d+
:一个数字
在每个项目之后
\\s*,?\\s*
:逗号,前后带有任意数量的空格。
并且在右括号之前不应使用逗号: (?<!,)
为此,您必须具有两个(或更多个)单独的表达式(使用|
运算符)。
所以会是这样的:
/\[\s*("[^"]*"|[0-9]+)(\s*,\s*("[^"]*"|[0-9]+))*\s*\]/
(您可能还想在开头使用^
,在结尾使用$
,以确保在数组之前/之后没有其他内容:/ /^...snip...$/
$
/ /^...snip...$/
匹配字符串。)
如果您需要带指数的浮点数,请添加句点和'e'字符: [0-9.eE]+
(这就是为什么我不使用\\d+
原因,因为在这种情况下只允许使用数字)。一个数字是有效的,显然要复杂得多(符号,带/不带符号的指数,仅在小数点之前或之后的数字...)
您还可以支持单引号字符串。 那也是一个单独的表达式: '[^']*'
。
您可能也想在方括号之前和之后都留有空格(开始: /^\\s*\\[...
和结束: ...\\]\\s*$/
)。
最后,如果您想真正支持JavaScript字符串,则需要添加对反斜杠的支持。 像这样的东西:( ("([^"]|\\\\.)*")
。
注意
您的.+
表达式将匹配"
并且,
并且也没有^
和$
数组,如下所示将与您的表达式完全匹配:
This Array ["test", 123, true, "this"] Here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.