我需要从以下函数返回带有“ 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", "/"]);
有什么想法吗?
谢谢。
答案 0 :(得分:1)
您的代码有一些问题。
删除正则表达式内的空格。 A-Z
和A - Z
的含义不同。第一个表示您要匹配A和Z之间的任意字母。后者表示您要匹配A
,-
或Z
。
在正则表达式对象上使用test(...)
方法来确定字符串是否与正则表达式模式匹配。字符串永远不能等于正则表达式对象。
toString
变量是一种常用的方法。这使您的代码不太清楚。我给它起了一个更合适的名称extractedPw
,可以更好地说明其用途。
您不会从您的方法中返回任何内容。名称“ 提取密码”表明它将返回提取的密码。
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);
如果您是说禁止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);
答案 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)的字符串。