あなたが知っているとは限りません.JavaScriptに関する正規表現です.

2273 ワード

この二日間は正規表現でちょっと複雑なものを作っていますが、ブラウザ間の違いによって私の多くの人参が浪費されます.
今は正則表現を五大主流ブラウザ(IE、Firefox、Chrome、Safari、Opera)の間の違いを整理して並べてみます.皆さんにも自分のための準備をしてください.
1、FirefoxとChromeはサイクル(および埋め込まれた関数定義)で作成された正規表現を過度に最適化し、JavaScriptを書いたと仮定した人は正規表現の構築と不正な作成をするようです.
 
  
var r;
for(var i = 0; i < 2; i++){
var x = /abc/g;
if(r)
document.write(r == x); // Firefox Chrome “true”
else
r = x;
}
2、何も返さない可能性のある関数を第二のパラメータとしてreplace方法に渡すと、IEはマッチングしたテキストを直接削除することができます(この前のテストで私がまとめたのはOperaの行為が独特で、今は間違った結論のように見えます).他のブラウザはマッチングしたテキストを「undefined」に置き換えます.
 
  
document.write('123'.replace(/2/, function(){})); // IE “13”, “1undefined3”
3、new RegExpの形式で正規表現を作成する場合、既存の正規表現の例をパラメータとして使用すると、ほとんどのブラウザは基本機能が同じですが、完全に独立した、全く新しい正規表現の例を作成します.Safariは、パラメータとしての正規表現の例をあっさりと返します.
 
  
var r = /1/;
document.write(new RegExp(r) == r); // Safari “true”, “false”
4、「空」の正規表現を直接文字列に変換すると、IE以外のブラウザでは「/(?)/」が得られ、IEでは「/」--ただし、正規表現から直接にsource属性を抽出すると、得られるのはすべて空の文字列である.
 
  
document.write(new RegExp('')); // IE “//”, “/(?:)/”
document.write(eval('' + new RegExp(''))) // IE “undefined”, “/(?:)/”
5、斜線「/」を含む正規表現を直接文字列に変換すると、「new RegExp('/')」を例にとると、FirefoxとOperaだけが「///」を得て、source属性を直接抽出すると「/」を得る.他のブラウザでは「///」が得られ、そのままソース属性を抽出すると「/」が得られます.
 
  
document.write(new RegExp('/')); // Firefox Opera “/\//”, “///”
document.write(eval('' + new RegExp('/'))) // Firefox Opera “/\//”, “undefined”
6、文字どおりの表現で正規表現を定義する場合、無効なオプションフラグ(例えば「/abc/n」)が使用されると、ChromeとSafariはこの無効なオプションフラグ(「/abc/」に相当)を完全に無視し、他のブラウザで文法エラーを引き起こす.
 
  
document.write(/abc/n); // Chrome Safari “/abc/”,
7、正規表現をビルダーで作成すると、オプションマークを指定する文字列パラメータに非有効フラグが含まれています.Firefoxでは異常が発生し、他のブラウザでは無効な部分は無視されます.
 
  
document.write(new RegExp('1', 'n')); // Firefox , ; “/1/”
とりあえずこれだけにしましょう.新しいのを見つけてから補充します.
来た:http://www.cnblogs.com/NanaLich