Как я могу построить регулярное выражение, чтобы исключить все, кроме букв и цифр? - PullRequest
0 голосов
/ 25 октября 2019

Мне нужно вернуть отфильтрованную строку с "a1a" из следующей функции.

Я пробовал несколько регулярных выражений, но ничего. Кроме того, я не могу использовать методы (часть проблемы).

let extractPassword = function(arr) {
  let toString = "";
  for (let i in arr) {
    if ( arr[i] === /[A - Za - z0 -9]/) {
      toString += arr[i];
    }
    console.log(toString);
  }
};

extractPassword(["a", "-", "~", "1", "a", "/"]);

Есть идеи?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

Ваш код имеет несколько проблем.

  1. Удалите пробелы внутри регулярного выражения. A-Z и A - Z не означают одно и то же. Первый означает, что вы хотите сопоставить любую букву между A и Z включительно. Последнее означает, что вы хотите сопоставить A, - или Z.

  2. Используйте метод test(...) для объекта регулярного выражения, чтобы определить, соответствует ли строка обычномуобразец выражения. Строка никогда не может быть равна объекту регулярного выражения.

  3. Переменная toString является широко используемым методом. Это делает ваш код немного менее понятным. Я дал ему более подходящее имя, extractedPw, которое лучше обозначает его назначение.

  4. Вы ничего не возвращаете из своего метода. Название « extract password» предполагает, что он вернет извлеченный пароль.

let extractPassword = function(arr) {
  let extractedPw = "";
  for (let i in arr) {
    if (/[A-Za-z0-9]/.test(arr[i])) {
      extractedPw += arr[i];
    }
    console.log(extractedPw);
  }
  return extractedPw;
};

extractPassword(["a", "-", "~", "1", "a", "/"]);
0 голосов
/ 25 октября 2019

Строка === регулярное выражение не работает.

Вместо этого используйте RegExp.prototype.test ()

Дополнительная информация здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

Ваш кодможет выглядеть так:

let extractPassword = function(arr) {
  let toString = "";
  const regex = /[A-Za-z0-9]/;
  for (let i in arr) {
    if (regex.test(arr[i])) {
      toString += arr[i];
    }
  }
  return toString;
};

console.log(extractPassword(["a", "-", "~", "1", "a", "/"]));
0 голосов
/ 25 октября 2019

Итак, вы просто хотите взять символы, которые соответствуют вашему регулярному выражению, и присоединиться к ним?

let extractPassword = arr => arr.filter(v => v.match(/[A-Za-z0-9]/)).join('');
  
let pw = extractPassword(["a", "-", "~", "1", "a", "/"]);
console.log(pw);

Если вы имеете в виду filter и join запрещены, вы можете изобрести их тривиально:

let extractPassword = arr => {
  let r = '';
  for (let v of arr)
    if (v.match(/[A-Za-z0-9]/))
      r += v;
  return r;
};

let pw = extractPassword(["a", "-", "~", "1", "a", "/"]);
console.log(pw);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...