#javascript #arrays #string #algorithm
#javascript #массивы #строка #алгоритм
Вопрос:
Возможно ли разнести строку с другим оператором?
Мне нужно, чтобы каждый код (разных размеров) пронумеровал [
]
это пример всех различных возможностей в enter :
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]'
]
Комментарии:
1. «но примером результата является …» —
console.log('[ '| '][' | ']')
расскажет вам, почему2. На самом деле я не понимаю, почему существует что-то вроде
[5
alone, например3. Просто сделайте то, что я предложил в своем первом комментарии. Каков результат и для чего ваш аргумент
.split()
?4.
codes.map(code => code.match(/d /g))
5. @Andreas хорошо, спасибо, код возвращает 0, я не знал
Ответ №1:
Вы могли бы использовать String.prototype.match()
const codes = [
"[5018902847][592][50189272809][5089113805]",
"[3898]",
"[375001833][3475001021]",
"",
]
const res = codes.map((code) => {
const extracted = code.match(/d /g)
return extracted amp;amp; extracted.map(Number)
})
console.log(res)
Ответ №2:
Вы можете определить разделитель регулярных выражений :
> '[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' ]
* ]
*
*/
Ответ №3:
Вы также можете сделать это без 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 amp;amp; extracted.map(Number)
})
console.log(res)