Heim >Web-Frontend >js-Tutorial >Verwendung der Methode „replace()' in den Fähigkeiten „javascript_javascript'.

Verwendung der Methode „replace()' in den Fähigkeiten „javascript_javascript'.

WBOY
WBOYOriginal
2016-05-16 16:02:411288Durchsuche

Ich habe kürzlich einige Alibaba-Front-End-Interviewfragen durchgesehen, und eine davon beinhaltet die Verwendung der replace()-Methode in JavaScript. Hier ist die ursprüngliche Frage:

„Sagen Sie mir, was die folgenden Funktionen bewirken? Was soll in das leere Feld eingefügt werden?“

 // 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') ); 
 })();

Das Folgende ist der Analyseprozess (es scheint besser zu sein, ihn zu nummerieren, ich persönlich denke, er ist besser organisiert)

1. Da diese Frage auch andere Wissenspunkte wie anonyme Funktionen, Prototypen usw. betrifft, steht sie nicht im Mittelpunkt dieser Diskussion.

2. Laut der Frage wissen wir, dass der Quellcode dieser Frage dem Schreiben einer Template-Engine ähnelt. Ersetzen Sie Platzhalter wie „{1}“ in der Vorlage durch die an sie übergebenen Parameter. Daher sollten arg Argumente sein. Aber! ! ! Da arg kein Array, sondern ein arrayähnliches Objekt ist (wenn Sie es nicht verstehen, können Sie es selbst googeln (u_u)), müssen wir einige Konvertierungen durchführen,

Code kopieren Der Code lautet wie folgt:
var arg=Array.prototype.slice.call(arguments ,0) ;

3. Die rechte Seite des Gleichheitszeichens ist die erste leere Antwort. Nachdem wir so viel gesagt haben, steht der zweite Raum im Mittelpunkt unserer Diskussion. Wir alle wissen, dass der zweite Raum darin besteht, den Platzhalter durch reguläre Ausdrücke zu finden und ihn entsprechend den Zahlen im Platzhalter umzuwandeln Um ehrlich zu sein, kommt es selten vor, dass der zweite Parameter der Ersetzungsmethode eine Funktion ist. Im Allgemeinen ist dies der Fall, wenn wir darauf stoßen:

Code kopieren Der Code lautet wie folgt:

var pattern=/8(.*)8/;
var str='Das ist ein 8baidu8';
document.write(str.replace(pattern,'8e99a69fbe029cd4e2b854e244eab143$1128dba7a3a77be0113eb0bea6ea0a5d0'));
4. Da es relativ wenige Situationen gibt, in denen der zweite Parameter des Ersetzens eine Funktion ist, konzentrieren wir uns auf die Situation, in der der zweite Parameter eine Funktion ist.

Zuallererst ist dies die Syntax der Ersetzungsfunktion: stringobject.replace(regexp/substr,replacement)

Wobei regexp/substr erforderlich ist. Ein Regexp-Objekt, das die zu ersetzende Zeichenfolge oder das zu ersetzende Muster angibt. (Beachten Sie, dass, wenn es sich bei dem Wert um eine Zeichenfolge handelt, dieser als Literalmuster abgerufen wird und nicht zuerst in ein Regexp-Objekt konvertiert wird.) Ersetzung erforderlich. Ein Zeichenfolgenwert. Gibt Funktionen zum Ersetzen von Text oder zum Generieren von Ersatztext an. Schließlich wird eine neue Zeichenfolge zurückgegeben, die erhalten wird, nachdem die erste Übereinstimmung oder alle Übereinstimmungen von regexp durch Ersetzung ersetzt wurden.

5. ECMAScript legt fest, dass die Parameterersetzung der Methode replace() eine Funktion anstelle einer Zeichenfolge sein kann. In diesem Fall wird die Funktion für jede Übereinstimmung aufgerufen und die zurückgegebene Zeichenfolge als Ersatztext verwendet. Der erste Parameter stellt das übereinstimmende Zeichen dar, der zweite Parameter stellt die minimale Indexposition des übereinstimmenden Zeichens dar (RegExp.index) und der dritte Parameter stellt die übereinstimmende Zeichenfolge dar (RegExp.input).

6. Das zweite Leerzeichen kann also wie folgt geschrieben werden: /{(d )}/g, und der vollständige Satz, wenn er in die Anweisung eingefügt wird, lautet:

Code kopieren Der Code lautet wie folgt:
return this.str.replace(/{(d )}/g, function (a, b) {
Rückgabe arg[b] ||. ''; });


Beim ersten Match wird {0} durch arg[0] ersetzt Bei der ersten Übereinstimmung wird {1} durch arg[1]

ersetzt Bei der ersten Übereinstimmung wird {2} durch arg[2]
ersetzt
7. Das Obige ist die Erklärung des zweiten Parameters der js-String-Methode replace() (wenn es irgendwelche Unvollkommenheiten gibt, fügen Sie diese natürlich selbst hinzu ~). ~~~~

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn