验证一个类似数组字符串的js正则表达式应该怎么写?

原本以为很简单的正则 哪知道怎么都写不好

[1,2,3,4,5,]
const [text, regex] = ['[123,456,789,]', /\[(\d+?,)+\]/g]
const matches = text.matchAll(regex)
console.log([...matches])

结果:

阅读 2.6k
3 个回答

这是正常的。通常这种解析都是需要此法分析的。

例如[1, "]"][, 1, [2], , [3, [4]]]要怎么去匹配呢?

既然你要用JS,直接通过JS去判断就好了呀。

/**
 * @param {string} input
 * @returns {boolean}
 */
function isArray (input) {
    try { return Array.isArray(eval(input)); }
    catch { return false; }
}

上述是比较偷懒的实现,如果输入值是不可控的,那会存在安全问题。所以最好的还是写一个简单的解析器。

你只匹配最后一个,因为搜索中你和最后的\]关联了。根据你的要求,其实前后的[]不需要强调发生关联,只要里面的部分,即/(\d+?,)/g 就好啦。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏