J'ai récemment parcouru quelques questions d'entretien d'Alibaba, et l'une d'elles implique l'utilisation de la méthode replace() en JavaScript. Voici la question d'origine :
.« Dites-moi à quoi servent les fonctions suivantes ? Que faut-il remplir dans l'espace vide ? »
// define (function (window) { function fn(str) { this.str = str; } fn.prototype.format = function () { var arg = ______; return this.str.replace(_______, function (a, b) { return arg[b] || ''; }); } window.fn = fn; })(window); // use (function(){ var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>'); console.log( t.format('http://www.alibaba.com', 'Alibaba', 'Welcome') ); })();
Ce qui suit est le processus d'analyse (il semble qu'il vaut mieux le numéroter, personnellement je pense qu'il est plus organisé)
1. Parce que cette question implique également d'autres points de connaissances, comme les fonctions anonymes, les prototypes, etc., mais ce n'est pas l'objet de cette discussion.
2. D'après la question, nous savons que le code source de cette question est similaire à l'écriture d'un moteur de modèle. Remplacez les espaces réservés tels que « {1} » dans le modèle par les paramètres qui lui sont transmis. Donc arg devrait être des arguments. mais! ! ! Puisque arg n'est pas un tableau, mais un objet de type tableau (si vous ne comprenez pas, vous pouvez le rechercher vous-même sur Google (u_u)), nous devons donc effectuer quelques conversions,
3. Le côté droit du signe égal est la première réponse vide. Cela dit, le deuxième espace est au centre de notre discussion ~~~~~~Nous savons tous que le deuxième espace consiste à trouver l'espace réservé à l'aide d'expressions régulières et à le convertir en fonction des nombres contenus dans l'espace réservé. la chaîne dans le tableau arg. Pour être honnête, il est rare que le deuxième paramètre de la méthode replace soit une fonction. Généralement, c'est le cas lorsque nous le rencontrons :
.Tout d'abord, voici la syntaxe de la fonction replace : stringobject.replace(regexp/substr,replacement)
Où regexp/substr est requis. Un objet regexp qui spécifie la chaîne ou le modèle à remplacer. (Notez que si la valeur est une chaîne, elle est récupérée sous forme de modèle littéral plutôt que d'être d'abord convertie en objet d'expression rationnelle.) Remplacement requis. Une valeur de chaîne. Spécifie les fonctions permettant de remplacer du texte ou de générer du texte de remplacement. Enfin, une nouvelle chaîne est renvoyée, qui est obtenue après avoir remplacé la première correspondance ou toutes les correspondances de l'expression rationnelle par remplacement.
5. ECMAScript stipule que le remplacement du paramètre de la méthode replace() peut être une fonction au lieu d'une chaîne. Dans ce cas, la fonction est appelée pour chaque correspondance et la chaîne qu'elle renvoie est utilisée comme texte de remplacement. Le premier paramètre représente le caractère correspondant, le deuxième paramètre représente la position d'index minimale du caractère correspondant (RegExp.index) et le troisième paramètre représente la chaîne correspondante (RegExp.input).
6. Ainsi, le deuxième espace peut être écrit comme ceci : /{(d )}/g, et la phrase complète lorsqu'elle est placée dans l'instruction est :
Lors de la première correspondance, {2} est remplacé par arg[2]
7. Ce qui précède est l'explication du deuxième paramètre de la méthode de chaîne js replace() en tant que fonction (s'il y a des imperfections, veuillez les ajouter vous-même. Bien sûr, cette question d'entretien a également été résolue ~). ~~~~
Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.