这是否可以用不同的运算符分解字符串?
我需要得到每个代码(不同大小(的编号[
]
这是entre:中所有差异可能性的一个例子
const codes = [
'[5018902847][592][50189272809][5089113805]',
'[3898]',
'[375001833][3475001021]',
'',
]
以及我需要的:
[5018902847, 592, 50189272809, 5089113805]
[3898]
[375001833, 3475001021]
null // because code is empty
我的第一个解决方案是这样的:
codes.map(code => {
const res = code.split('[ '| '][' | ']');
console.log(res)
})
但结果的一个例子是:
[
' [5',
'51889',
'28475][5',
'51889424192][5',
'518892728',
'9][5',
'518891138',
'5]'
]
您可以使用String.protype.match((
const codes = [
"[5018902847][592][50189272809][5089113805]",
"[3898]",
"[375001833][3475001021]",
"",
]
const res = codes.map((code) => {
const extracted = code.match(/d+/g)
return extracted && extracted.map(Number)
})
console.log(res)
您可以定义正则表达式分隔符:
> '[5018902847][592][50189272809][5089113805]'.split(/[[]]/)
[
'',
'5018902847',
'',
'592',
'',
'50189272809',
'',
'5089113805',
''
]
要将codes
数组转换为所需格式,这里有一个很酷的单行:
const codes = [
'[5018902847][592][50189272809][5089113805]',
'[3898]',
'[375001833][3475001021]',
'',
]
const cleanedCodes = codes.map(code => code.split(/[[]]/).filter(s => s.length)).filter(a => a.length)
console.log(cleanedCodes);
/*
* will output : [
* [ '5018902847', '592', '50189272809', '5089113805' ],
* [ '3898' ],
* [ '375001833', '3475001021' ]
* ]
*
*/
您也可以在没有match
的情况下完成(来自@hgb123答案(。
const codes = [
"[5018902847][592][50189272809][5089113805]",
"[3898]",
"[375001833][3475001021]",
"",
]
const res = codes.map((code) => {
var extracted = code.split(']').filter(Boolean).map(x => {return x.replace("[","");})
return extracted && extracted.map(Number)
})
console.log(res)