ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 正規表現ブラウザの違い
JavaScript の正規表現はブラウザごとに異なる結果を生成する可能性があります。以下に、5 つの主要なブラウザ (IE、Firefox、Chrome、Safari、Opera、現在のバージョンの対象) での正規表現の結果を整理して、違いをリストしてみましょう。
1. Firefox と Chrome は、ループ内で作成された正規表現 (およびループ内に埋め込まれた関数定義) を過剰に最適化し、JavaScript を書く人が正規表現の構築と代入を間違った場所に書くと想定しているようです。
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; }
2. replace メソッドの 2 番目のパラメータとして何も返さない関数を渡すと、IE は一致するテキストを直接削除する可能性があります (前回のテストでは、Opera の動作比較をまとめましたが、現在は次のようになっています)。間違った結論)、他のブラウザでは一致するテキストが「未定義」に置き換えられます。
// IE会输出“13”,而其它浏览器输出“1undefined3” document.write('123'.replace(/2/, function(){}));
3. 新しい RegExp の形式で正規表現を作成するときに既存の正規表現インスタンスをパラメータとして使用すると、ほとんどのブラウザは同じ基本機能を備えた新しい正規表現を作成しますが、Safari は完全に独立したインスタンスを返します。正規表現インスタンスをパラメータとして指定します。
var r = /1/; // Safari会输出“true”,而其它浏览器输出为“false” document.write(new RegExp(r) == r);
4. 「空の」正規表現を直接文字列に変換すると、IE 以外のブラウザでは「/(?:)/」が取得され、IE では「//」が取得されますが、正規表現からsource 属性は式から直接抽出され、結果はすべて空の文字列になります。
// IE输出“//”,其它浏览器输出“/(?:)/” document.write(new RegExp('')); // IE输出“undefined”,其它浏览器输出“/(?:)/” document.write(eval('' + new RegExp('')))
5. スラッシュ「/」を含む正規表現を文字列に直接変換する場合 - 「new RegExp('/')」を例にとると、Firefox と Opera のみが「///」を取得します。ソース属性を抽出すると「/」が取得されますが、他のブラウザでは「///」が取得され、ソース属性を直接抽出すると「/」が取得されます。
// Firefox和Opera输出“/\//”,其它浏览器输出“///” document.write(new RegExp('/')); // Firefox和Opera输出“/\//”,其它浏览器输出“undefined” document.write(eval('' + new RegExp('/')))
6. リテラル表現を使用して正規表現を定義するときに無効なオプション フラグ (「/abc/n」など) が使用された場合、Chrome と Safari は無効なオプション フラグ (「 /abc/ に相当)」を完全に無視します。 ")、他のブラウザでは構文エラーが発生します。
// Chrome和Safari会输出“/abc/”,其它浏览器中产生语法错误 document.write(/abc/n);
7. コンストラクターを通じて正規表現を作成するときに、オプション フラグを指定する (2 番目の) 文字列パラメータに有効なフラグではない文字が含まれている場合、Firefox では例外が発生し、そうでない場合、ブラウザは無効な部分を無視します。 。
// Firefox中会引起一个异常,提示无效的标志;而其它浏览器会输出“/1/ document.write(new RegExp('1', 'n')); ”
上記は、JavaScript 正規表現のブラウザの違いに関する内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) をご覧ください。