原本以为很简单的正则 哪知道怎么都写不好
[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 周年「问答」打卡 ,欢迎正在阅读的你也加入。
8 回答5.9k 阅读✓ 已解决
9 回答9.3k 阅读
6 回答4.9k 阅读✓ 已解决
5 回答3.6k 阅读✓ 已解决
3 回答10.4k 阅读✓ 已解决
4 回答8k 阅读✓ 已解决
7 回答9.9k 阅读
/\[(\d+,)+\]/g
\d
后面需要一个+
,因为\d
表示 0-9 的数字而不是一个数