用不同的运算符分解字符串



这是否可以用不同的运算符分解字符串?

我需要得到每个代码(不同大小(的编号[]

这是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)

最新更新