-2
votes

Comment puis-je créer une expression régulière pour tout exclure, sauf les lettres et les chiffres?

Je dois renvoyer une chaîne filtrée avec "a1a" de la fonction suivante.

J'ai essayé plusieurs expressions régulières mais rien. En plus, je ne peux pas utiliser de méthodes (une partie du défi).

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

Des idées?

Merci.


11 commentaires

Pourquoi avez-vous ces espaces dans votre regex? Juste pourquoi?


Essayez de supprimer les espaces dans votre expression régulière ... /A-Za-z0-9/ .


Vous ne pouvez pas utiliser de méthodes, mais la première ligne de votre code est la création d'une méthode? Pouvez-vous clarifier cette exigence?


Vous pouvez utiliser un service comme regex101.com pour tester et affiner votre regex.


Je ne peux pas utiliser les méthodes live slice () ou .map () etc ... j'ai besoin de créer une fonction pour faire juste ça ...


les espaces sont ajoutés automatiquement par mon code VS. C'est une extension qui fait ça ...


J'ai utilisé un service regex, mais rien ... Il semble que mon VSCode ne reconnaisse pas les expressions régulières ...


Comme arr[i] est une chaîne, elle ne sera jamais égale à votre regex. Pour tester une chaîne par rapport à une expression régulière, vous devez utiliser l'une des méthodes du prototype de RegEx ou de String


Pouvez-vous être plus précis?


Une chaîne ne peut pas être === à un objet d'expression régulière. Vous devez utiliser l'une des méthodes de regex, comme .test(...) , pour déterminer si la chaîne correspond à l'expression régulière.


tu veux dire comme cela? si (arr [i] .match (/ A - Za - z0 -9 / gi)) {


4 Réponses :


0
votes

Alors, vous voulez juste prendre les personnages qui correspondent à votre regex et les rejoindre?

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

Si vous voulez dire que le filter et la join sont interdits, vous pouvez les réinventer de manière simple:

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


1 commentaires

Le second l'a résolu. Merci beaucoup pour l'aide, je suis toujours un noob ...



1
votes

Votre code a quelques problèmes.

  1. Supprimez les espaces à l'intérieur de l'expression régulière. AZ et A - Z ne signifient pas la même chose. Le premier indique que vous souhaitez faire correspondre n'importe quelle lettre entre A et Z inclus. Ce dernier indique que vous voulez faire correspondre A , - ou Z

  2. Utilisez la méthode test(...) sur l'objet regex pour déterminer si la chaîne correspond au modèle d'expression régulière. Une chaîne ne peut jamais être égale à l'objet regex.

  3. La variable toString est une méthode couramment utilisée. Cela rend votre code un peu moins clair. Je lui ai donné un nom plus approprié, extractedPw , qui dénote mieux son objectif.

  4. Vous ne retournez rien de votre méthode. Le nom « extraire le mot de passe» suggère qu'il renverra un mot de passe extrait.

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 commentaires

Merci pour votre temps et pour l'explication parfaite.



0
votes

L'expression régulière String === ne fonctionne pas.

Utilisez plutôt RegExp.prototype.test ()

Plus d'informations ici: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

Votre code pourrait ressembler à ceci:

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 commentaires

-1
votes

Créez une fonction nommée extractPassword qui prend un tableau de caractères (qui comprend certains caractères de la corbeille) et renvoie une chaîne avec uniquement des caractères valides (a - z, A - Z, 0 - 9).


1 commentaires

Bonjour, bienvenue sur StackOverflow. Il n'est pas clair en quoi il s'agit d'une réponse à la question initiale. Peut-être élaborer un peu ...