繁体   English   中英

在javascript中使用正则表达式解析数组语法

[英]Parsing array syntax using regex in javascript

我在这里找到了答案,但是它在php中。

我想匹配[123, "hehe", "lala"]这样的数组,但[123, "hehe", "lala"]是数组语法正确。

我做了这个正则表达式/\\["?.+"?(?:,"?.+"?)*\\]/

问题是,如果输入为[123, "hehe, "lala"] ,则正则表达式匹配,但是语法不正确。

如何仅在数组语法正确的情况下使其匹配?

我的问题是使第二个"匹配第一个"时需要。

编辑:我只是想只用数组中的字符串和数字来做到这一点。

您可以尝试使用此正则表达式: /\\[((\\d+|"([^"]|\\\\")*?")\\s*,?\\s*)*(?<!,)\\]/

每个项目应

"([^"]|\\\\")*?" :以“开头”和“结尾”,除“之外”。 如果包含“,则应将其转义(\\“)。

\\d+ :一个数字

在每个项目之后

\\s*,?\\s* :逗号,前后带有任意数量的空格。

并且在右括号之前不应使用逗号: (?<!,)

演示: https : //regex101.com/r/jRAQUc/1

为此,您必须具有两个(或更多个)单独的表达式(使用|运算符)。

所以会是这样的:

/\[\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM