Ich habe dieses Problem untersucht, das nur schlimmer zu werden scheint, je mehr ich tiefer graben.Regulärer Ausdruck in JavaScript String Split, Browserkompatibilitätsproblem
begann ich unschuldig genug versucht, diesen Ausdruck zu verwenden, um eine Zeichenfolge auf HTML 'br' Tags zu spalten:
T = captions.innerHTML.split(/<br.*?>/g);
Diese in jedem Browser funktionieren (FF, Safari, Chrome), außer IE7 und IE8 mit Beispiel Eingabetext wie folgt aus:
is invariably subjective. <br />
The less frequently used warnings (Probably/Possibly) <br />
Bitte beachten Sie, dass das Beispiel Text ein Leerzeichen vor dem ‚/‘ enthält, und geht eine neue Zeile.
die beiden folgenden werden alle HTML-Tags in jedem Browser entsprechen:
T = captions.innerHTML.split(/<.*?>/g);
T = captions.innerHTML.split(/<.+?>/g);
jedoch überraschenderweise (zumindest für mich), das nicht Arbeit in FF und Chrome:
T = captions.innerHTML.split(/<br.+?>/g);
Edit:
Diese (vorgeschlagen mehrmals in den Antworten unten) auf IE nicht 7 oder 8 funktioniert:
T = captions.innerHTML.split(/<br[^>]*>/g);
(Es hat die Arbeit an Chrome und FF.)
Meine Frage ist: weiß jemand einen Ausdruck, der die ‚br‘ Tags übereinstimmen oben (aber nicht andere HTML-Tags) in allen gängigen Browsern . Und kann jemand bestätigen, dass das letzte Beispiel oben eine gültige Übereinstimmung sein sollte, da zwei Zeichen im Beispieltext vor dem '>' vorhanden sind.
PS - mein Doctype ist HTML-Übergang.
Edit:
Ich glaube, ich habe Beweise, die dies ist spezifisch für die string.split() Verhalten auf IE, und in der Regel nicht regex. Sie müssen split() verwenden, um dieses Problem zu sehen. Ich habe auch eine Testmatrix gefunden, die eine Fehlerrate von ungefähr 30% für split() Testfälle zeigt, wenn ich es auf IE lief. Die gleichen Tests bestanden zu 100% auf FF und Chrome:
http://stevenlevithan.com/demo/split.cfm
Bisher habe ich noch keine Lösung für IE gefunden, und die Bibliothek vom Autor dieser Testmatrix zur Verfügung gestellt hat diesen Fall nicht beheben.
PPS - Ich teste nicht IE6 oder Opera, aber ich spreche gerne, wenn es relevant ist. –