#javascript #node.js #split
Вопрос:
Эй, я пытаюсь разделить строку, прочитанную из файла, файл содержит несколько строк, которые читаются следующим образом
username:passwordrn
username:passwordrn
username:passwordrn
И так далее, я не уверен, как сделать их все одновременно и разделить их на 2 разных параметра, один для имени пользователя и один для пароля.
Комментарии:
1.
.split(":")
?2. я пробовал это и тоже пытался . toString, чтобы я мог повторно разделить в rn, а затем просто добавить запятую вместо :
3. Что вы пробовали? Покажите свой код.
4. Пароли, хранящиеся в виде открытого текста в файле? Должен ли я перестать помогать сейчас в принципе?
Ответ №1:
Использование регулярного выражения и matchAll()
, и передача возвращенного итератора Array.from()
и использование встроенного map()
для возврата объектов. (Имеет дополнительное преимущество в том, что позволяет :
вводить пароли)
const input = 'user1:password1rnuser2:password2rnuser3:password3rn';
const result = Array.from(
input.matchAll(/(. ?):(. ?)rn/g),
([, username, password]) => ({ username, password })
);
console.log(result);
Ответ №2:
Пожалуйста, попробуйте код ниже.
var mainStr = "username:passwordrnusername:passwordrnusername:passwordrn";
var usernameArr = [];
var passwordArr = [];
mainStr.split("rn").forEach(str => {
var strArr = str.split(":");
strArr[0] amp;amp; usernameArr.push(strArr[0]);
strArr[1] amp;amp; passwordArr.push(strArr[1]);
});
console.log("Username ", usernameArr);
console.log("Password ", passwordArr);
Ответ №3:
Вы можете преобразовать это в массив пар ключ/значение
let lines = `john:123443rn
alan:ffg1234rn
someone:xxghj!34rn`;
let pairs = lines.split("rn") // convert into an array
.map(l => l.split(':') // split on the :
.map(e => e.replaceAll("r", "").replaceAll("n", ""))) // clear out any extra newlines that lingered
.filter(e => e.join('').trim() != '') // filter out any empties gathered along the way
.map(grp => ({username: grp[0], password: grp[1]})) // transform the array into key/value pairs
console.log(pairs)
Ответ №4:
используйте .метод замены
const str ='username:passwordrn'
const username = str.split(:)[0];
const password = str.split(:)[1].replace(/[rn] /g, '');
Для полной строки:
const str =`username:passwordrn
username:passwordrn
username:passwordrn`;
const res = str.split(/[rn]/g)
.filter(l=>l!=="")
.map(s=>({username:s.split(':')[0], password:s.split(':')[1]}));
console.log(res)
// [{username:'username', password:'password'},...];