41 votes

Comment savoir si JavaScript string.replace () a fait quelque chose ?

La fonction replace renvoie la nouvelle chaîne avec les remplacements, mais s'il n'y avait pas de mots à remplacer, alors la chaîne d'origine est renvoyée. Y a-t-il un moyen de savoir s'il a réellement remplacé autre chose que la comparaison du résultat avec la chaîne d'origine ?

30voto

Kobi Points 65357

Une option simple est de vérifier les correspondances avant de remplacer :

var regex = /i/g;
var newStr = str;

var replaced = str.search(regex) >= 0;
if(replaced){
    newStr = newStr.replace(regex, '!');
}

Si vous ne le souhaitez pas non plus, vous pouvez abuser du rappel replace pour y parvenir en un seul passage :

var replaced = false;
var newStr = str.replace(/i/g, function(token){replaced = true; return '!';});

3voto

Alnitak Points 143355

Comparer les chaînes avant et après est le moyen le plus simple de vérifier si elle a fait quelque chose, il n'y a pas de support intrinsèque dans String.replace().

[exemple concret de la façon dont '==' pourrait échouer supprimé parce qu'il était faux]

2voto

Stanislav Yaglo Points 2305

En tant que solution de contournement, vous pouvez implémenter votre propre fonction de rappel qui définira un drapeau et effectuera le remplacement. L'argument replacement de replace peut accepter des fonctions.

1voto

xanatos Points 30513

Si votre remplaçant a une longueur différente du texte recherché, vous pouvez vérifier la longueur de la chaîne avant et après. Je sais, c'est une réponse partielle, valable seulement sur un sous-ensemble du problème.

OU

Vous pouvez faire une recherche. Si la recherche est réussie, vous faites un remplacement sur la sous-chaîne en commençant par l'index trouvé, puis recomposez la chaîne. Cela pourrait être plus lent parce que vous générez 3 chaînes au lieu de 2.

var test = "Hellllo";
var index = test.search(/ll/);

if (index >= 0) {
    test = test.substr(0, index - 1) + test.substr(index).replace(/ll/g, "tt");
}

alert(test);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X