我如何建立一个正则表达式来排除所有字母和数字除外?

时间:2019-10-25 14:40:55

标签: javascript regex string function

我需要从以下函数返回带有“ 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", "/"]);

有什么想法吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

您的代码有一些问题。

  1. 删除正则表达式内的空格。 A-ZA - Z的含义不同。第一个表示您要匹配A和Z之间的任意字母。后者表示您要匹配A-Z

  2. 在正则表达式对象上使用test(...)方法来确定字符串是否与正则表达式模式匹配。字符串永远不能等于正则表达式对象。

  3. toString变量是一种常用的方法。这使您的代码不太清楚。我给它起了一个更合适的名称extractedPw,可以更好地说明其用途。

  4. 您不会从您的方法中返回任何内容。名称“ 提取密码”表明它将返回提取的密码。

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", "/"]);

答案 1 :(得分:0)

那么,您只想获取与正则表达式匹配的字符并加入它们?

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

如果您是说禁止filterjoin,那么您可以不费吹灰之力地重新发明它们:

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);

答案 2 :(得分:0)

字符串===正则表达式不起作用。

请改为使用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", "/"]));

答案 3 :(得分:-1)

创建一个名为extractPassword的函数,该函数接受一个字符数组(其中包括一些垃圾字符),并返回仅包含有效字符(a-z,A-Z,0-9)的字符串。