2

次のように、文字列を 3 つのキーワードで分割しようとしています。

var option=$(this).text().split(/(To:|From:|Line:)/);

$(this).text()テスト用です "From:Circular Quay To:Manly Line:F1 Manly"

すべての「通常の」ブラウザは 7 つの要素の配列を返しますが、IE7 & 8 は 3 つの要素の配列を返します。

何か案は?

4

1 に答える 1

3

この記事で説明されているように、正規表現分割はすべてのブラウザーで同じように機能するとは限りません。

  • Internet Explorer は、結果の配列からほとんどすべての空の値を除外します (たとえば、データ内で 2 つの区切り記号が隣り合っている場合、または区切り記号がデータの最初または最後にある場合)。区切り文字として文字列を使用する場合、IE には空の値が含まれるため、これは私には意味がありません。

  • Internet Explorer と Safari は、キャプチャー括弧の値を返された配列にスプライスしません (この機能は単純なパーサーなどで役立ちます)。

  • Firefox は、参加していないキャプチャ グループの結果として、未定義の値を返された配列にスプライスしません。

  • Internet Explorer、Firefox、および Safari には、分割仕様 (実際には非常に複雑です) に従わないさまざまなエッジ ケースのバグが追加されています。

(注: これらの動作は、最近のブラウザーでは多少変更されています。ブラウザー固有のアルゴリズムを実装するために、これらの説明に依存しないでください!)

区切り文字の順序が常に同じである場合は、朗報です。おそらく本当に関心のあるもの、つまりコンテンツ文字列は、すべてのブラウザーでここに表示されます。したがって、配列の各文字列をテストして、それが空の文字列か区切り文字かを確認するだけです。

文字列の区切り文字が常に同じ順序である場合は、すべてのブラウザで区切り文字をキャプチャせずに削除することをお勧めします。

var s = s.split(/To:|From:|Line:/);

順序が変わる可能性があるために区切り文字が必要な場合は、分割し\bてすべての文字列を確認することをお勧めします。

于 2013-07-15T06:42:52.113 に答える