[英]Regular Expression: Array Match
我需要一个正则表达式来匹配以下可以嵌套的数字数组。 这些应该通过:
[]
[1, 2, 3]
[1, 2, 3, [1,2,3], 5]
但以下应该无法通过测试:
abc
1
[1,2,3
[#]
这有效:
/(^\[)(\d+\,|\s(?:(|\,))|\d+|\s\[|\]\,)*(\]$)/g
有没有更好的方法来达到同样的结果。 我试过向前看,但没有完全理解它并且无法让它工作。
正则表达式方法如下:从所有嵌套结构中删除括号,然后检查结果字符串是否遵循[
+number+1 或更多重复,
+ numbers+ ]
模式:
var s = ['[]', '[1, 2, 3]', '[1, 2, 3, [1,2,3], 5]', '1', '[1,2,3', '[#]']; var rx = /(?!^)\\[([^\\][]*)]/; var valid_rx = /^\\[(?:\\s*\\d+(?:\\s*,\\s*\\d+)*)?\\s*]$/; for (var i=0; i<s.length; i++) { var test_string = s[i]; console.log(test_string); while (rx.test(test_string)) { test_string = test_string.replace(rx, "$1") } console.log(valid_rx.test(test_string)); }
第一个正则表达式/(?!^)\\[([^\\][]*)]/
查找不在字符串起始位置的[...]
子字符串。 在[
和]
,不能有[
也]
。 while
循环将这些括号一一删除,直到不匹配为止。
第二个正则表达式^\\[(?:\\s*\\d+(?:\\s*,\\s*\\d+)*)?\\s*]$
验证结果字符串:
^
- 字符串的开始\\[
- 一个[
(?:
- 一个非捕获组:
\\s*
- 0+ 个空格\\d+
- 1+ 位数字(?:\\s*,\\s*\\d+)*
- 的 0 次或多次重复,
用 0+ 个空格包围,1+ 个数字)?
- 可选组结束\\s*
- 0+ 个空格]
- 一个]
$
- 字符串的结尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.