繁体   English   中英

正则表达式:数组匹配

[英]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.

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