Pour mettre cela en contexte, tenir compte de ces 2 fonctions:Comment limiter une chaîne à un ensemble spécifique de caractères dans JavaScript?
ml_RestrictToChars = function(input,regex) {
var result = '';var c = '';
var rx = new RegExp(regex);
for (var i = 0; i < input.length; i++) {
c = input.charAt(i);
if (rx.test(c)) {
result += c;
}
}
return result;
};
ml_OmitChars = function(input,regex) {
var rx = new RegExp(regex,'g');
return input.replace(rx,'');
};
La première fonction limitera l'entrée à un certain jeu de caractères, le second omettre un caractère ou d'une séquence de caractères de l'entrée. Comme vous pouvez le voir par le code dans la première fonction, il ne fonctionnera que si une seule classe de caractères est passée dans l'argument 'regex' parce que le code d'inclusion ne vérifie les caractères qu'un seul à la fois.
Tenir compte de la chaîne d'entrée 12-34
, maintenant si je passe une expression régulière de '[0-9]'
à la première fonction et '[^0-9]'
à la deuxième fonction, je vais obtenir une sortie identique comme prévu: 1234
Cependant, si je l'utilise une expression plus avancée dans la deuxième fonction comme '[^0-9][^0-9]-'
, j'obtiendrai une sortie de 12-
. Mais si je passe plus d'une classe de caractères à la première fonction, elle retournera une chaîne vide. Ce que je me demande est s'il y a un moyen facile (de préférence sans boucle) de faire l'inverse de ml_OmitChars afin qu'ils fonctionnent de manière similaire?
Pourquoi testez-vous par caractère dans vos fonctions ml_RestrictToChars? – Johan
S'il n'a pas testé par caractère en utilisant cette approche, il n'y aurait aucun moyen d'exclure les caractères. C'est ce que fait la ligne if (rx.test (c)) - déterminez si chaque caractère doit être inclus dans le résultat. Je ne dis pas que c'est la seule approche du problème, et j'espérais que quelqu'un serait capable d'aborder cela d'un point de vue différent. – NightOwl888
Ah, alors vous pouvez utiliser votre fonction omitchars et renvoyer le diff entre l'original et la fonction omitchars. Cela refléterait vos fonctions. – Johan