#javascript #arrays #string
#javascript #массивы #строка
Вопрос:
Я пытаюсь создать массивы из следующих строк:
"[DHKSGFKDBF][JDKDFJ][NDKDHDLSJD]" // ["DHKSGFKDBF", "JDKDFJ", "NDKDHDLSJD"]
"[ADJDJKDFJ][JEJZJDUDU]" // ["ADJDJKDFJ", "JEJZJDUDU"]
"[ADJDJKDFJ]" // ["ADJDJKDFJ"]
Есть простой способ сделать это?
Ответ №1:
Существует множество способов сделать это. Проще всего было бы удалить внешний и разделить.
var str = "[DHKSGFKDBF][JDKDFJ][NDKDHDLSJD]"
var arr = str.slice(1,str.length-1).split('][');
console.log(arr);
Комментарии:
1. …или наоборот:
.split(/[[]] /).slice(1,-1)
Ответ №2:
var str = "[DHKSGFKDBF][JDKDFJ][NDKDHDLSJD]"
var array = str.substring(1,str.length-1).split("][");
console.log(array);
приводит к:
["DHKSGFKDBF", "JDKDFJ", "NDKDHDLSJD"]
Ответ №3:
Вы можете заменить все не алфавитно-цифровые символы ( /W /g
) на разделитель ( ,
), разделить на разделитель, а затем отфильтровать нули ( !v
) в начале и конце.
const inputs = [
"[DHKSGFKDBF][JDKDFJ][NDKDHDLSJD]", // ["DHKSGFKDBF","JDKDFJ","NDKDHDLSJD"]
"[ADJDJKDFJ][JEJZJDUDU]", // ["ADJDJKDFJ","JEJZJDUDU"]
"[ADJDJKDFJ]" // ["ADJDJKDFJ"]
]
const convert = s => s.replace(/W /g, ',').split(',').filter(v => !!v);
inputs.forEach(input => console.log(JSON.stringify(convert(input))));
.as-console-wrapper { top: 0; max-height: 100% !important; }
Ответ №4:
Вы можете использовать string.match
функцию.
var str = "[DHKSGFKDBF][JDKDFJ][NDKDHDLSJD]";
console.log(str.match(/[(.*?)]/g).map(item => item.substring(1, item.length - 1)));
Ответ №5:
После того, как вы проверили правильный формат строки (т. Е. Начиная с [
и заканчивая ]
), вы можете удалить начало [
и закрытие ]
и разделить на ][
, например:
[
"[DHKSGFKDBF][JDKDFJ][NDKDHDLSJD]",
"[ADJDJKDFJ][JEJZJDUDU]",
"[ADJDJKDFJ]",
""
].forEach(str => {
console.log(splitStr(str));
});
function splitStr(str) {
if (str amp;amp; str.length > 2 amp;amp; str.charAt(0) == '[' amp;amp; str.charAt(str.length - 1) == ']') {
return str.substring(1, str.length - 1).split('][');
}
return [];
}