原本以为很简单的正则 哪知道怎么都写不好
[1,2,3,4,5,]
const [text, regex] = ['[123,456,789,]', /\[(\d+?,)+\]/g]
const matches = text.matchAll(regex)
console.log([...matches])
结果:
原本以为很简单的正则 哪知道怎么都写不好
[1,2,3,4,5,]
const [text, regex] = ['[123,456,789,]', /\[(\d+?,)+\]/g]
const matches = text.matchAll(regex)
console.log([...matches])
结果:
这是正常的。通常这种解析都是需要此法分析的。
例如[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 周年「问答」打卡 ,欢迎正在阅读的你也加入。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
/\[(\d+,)+\]/g
\d
后面需要一个+
,因为\d
表示 0-9 的数字而不是一个数