1
JavaScriptでは、長さ1の文字列が、JavaScriptの識別子の文字列文字などの文字セットに属しているかどうかを確認する簡単で迅速な方法を確認する必要がありますか?正規表現は、オブジェクトのキーをセットとしてチェックするより効率的ですか?
私は次のテストを書いた:セットは一つの文字を行うよりもはるかに速いように見えたとして、ここで奇妙な
//performance test for matching
var re = /[a-zA-Z$_]/;
console.time("regex");
for(var i=0;i<100000;i++) re.test("_");
console.timeEnd("regex");
var objs = {"_":true, 0:true, 1:true, 2:true, 3:true, 4:true, 5:true, 6:true, 7:true, 8:true, 9:true, a:true, b:true, c:true, d:true, e:true, f:true, g:true, h:true, "i":true, j:true, k:true,
l:true, m:true, n:true, o:true, p:true, q:true, r:true, t:true, $:true
};
console.time("objcheck");
for(var i=0;i<100000;i++) "_" in objs;
console.timeEnd("objcheck");
/*
regex: 10ms
objcheck: 1ms
*/
何かは、一貫して、オブジェクトにキーをチェックすると、定義されてthatsのさ正規表現マッチ。これはなぜですか?正規表現はここで速くすべきではないか?
あなたはそれがすべきだと思いますか? – Bergi
マイクロベンチマークには欠陥があり、信頼できません。 2つの異なるアプローチを使用して実際のアプリケーションをベンチマークします。 – Bergi
'Set'を使うことを考えましたか? – Bergi