Heim > Web-Frontend > js-Tutorial > Unterschiede im JavaScript-Browser für reguläre Ausdrücke

Unterschiede im JavaScript-Browser für reguläre Ausdrücke

黄舟
Freigeben: 2016-12-20 15:47:57
Original
1331 Leute haben es durchsucht

Die Ergebnisse regulärer Ausdrücke in JavaScript können in verschiedenen Browsern unterschiedlich sein. Im Folgenden sind die regulären Ausdrücke in den fünf wichtigsten Browsern aufgeführt (IE, Firefox, Chrome, Safari, Opera, abhängig von der aktuellen Version). Lassen Sie uns die Unterschiede zwischen ihnen auflisten ihnen.

1. Firefox und Chrome überoptimieren reguläre Ausdrücke, die in Schleifen erstellt werden (und darin eingebettete Funktionsdefinitionen), als würden sie davon ausgehen, dass Leute, die JavaScript schreiben, die Konstruktion und Zuweisung regulärer Ausdrücke an der falschen Stelle schreiben.

var r;
for(var i = 0; i < 2; i++){
  var x = /abc/g;
  if(r)
    // 第二个循环时Firefox和Chrome会输出“true”
    document.write(r == x); 
  else
    r = x;
}
Nach dem Login kopieren

2. Wenn Sie eine Funktion, die möglicherweise nichts zurückgibt, als zweiten Parameter an die Ersetzungsmethode übergeben, löscht der IE möglicherweise direkt den passenden Text (in früheren Tests kam ich zu dem Schluss, dass das Verhalten von Opera einzigartig ist , was jetzt eine falsche Schlussfolgerung zu sein scheint), während andere Browser den passenden Text durch „undefiniert“ ersetzen.

// IE会输出“13”,而其它浏览器输出“1undefined3”
document.write(&#39;123&#39;.replace(/2/, function(){}));
Nach dem Login kopieren

3. Wenn Sie beim Erstellen eines regulären Ausdrucks in Form eines neuen RegExp eine vorhandene Instanz eines regulären Ausdrucks als Parameter verwenden, erstellen die meisten Browser einen neuen regulären Ausdruck, der dieselben Grundfunktionen hat, aber identisch ist völlig unabhängig, eine neue reguläre Ausdrucksinstanz; Safari gibt einfach die reguläre Ausdrucksinstanz als Parameter zurück.

var r = /1/;
// Safari会输出“true”,而其它浏览器输出为“false”
document.write(new RegExp(r) == r);
Nach dem Login kopieren

4. Wenn Sie einen „leeren“ regulären Ausdruck direkt in einen String konvertieren, erhalten andere Browser als der IE „/(?:)/“ und der IE „//“—— Wenn Sie jedoch das Quellattribut direkt aus dem regulären Ausdruck extrahieren, erhalten Sie lediglich eine leere Zeichenfolge.

// IE输出“//”,其它浏览器输出“/(?:)/”
document.write(new RegExp(&#39;&#39;)); 
// IE输出“undefined”,其它浏览器输出“/(?:)/”
document.write(eval(&#39;&#39; + new RegExp(&#39;&#39;)))
Nach dem Login kopieren

5. Wenn Sie einen regulären Ausdruck, der einen Schrägstrich „/“ enthält, direkt in eine Zeichenfolge umwandeln – nehmen Sie „new RegExp('/')“ als Beispiel, erhalten nur Firefox und Opera „/“ //“ und das direkte Extrahieren des Quellattributs erhält „/“; während andere Browser „///“ erhalten und das direkte Extrahieren des Quellattributs „/“ erhalten.

// Firefox和Opera输出“/\//”,其它浏览器输出“///”
document.write(new RegExp(&#39;/&#39;)); 
// Firefox和Opera输出“/\//”,其它浏览器输出“undefined”
document.write(eval(&#39;&#39; + new RegExp(&#39;/&#39;)))
Nach dem Login kopieren

6. Wenn Sie bei der Verwendung eines Literalausdrucks zum Definieren eines regulären Ausdrucks ein ungültiges Optionsflag (z. B. „/abc/n“) verwenden, ignorieren Chrome und Safari dieses Ungültigkeitsoptionsflag vollständig ( entspricht „/abc/“), was in anderen Browsern zu einem Syntaxfehler führt.

// Chrome和Safari会输出“/abc/”,其它浏览器中产生语法错误
document.write(/abc/n);
Nach dem Login kopieren

7. Wenn der (zweite) String-Parameter, der das Optionsflag für einen regulären Ausdruck angibt, wenn er über den Konstruktor erstellt wird, Zeichen enthält, die keine gültigen Flags sind, löst Firefox eine Ausnahme aus und andere Browser tun dies Ignorieren Sie den ungültigen Teil.

// Firefox中会引起一个异常,提示无效的标志;而其它浏览器会输出“/1/
document.write(new RegExp(&#39;1&#39;, &#39;n&#39;)); ”
Nach dem Login kopieren

Das Obige ist der Inhalt der Browserunterschiede in regulären JavaScript-Ausdrücken. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Aktuelle Ausgaben
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage