2011-06-23 11 views

答えて

0

s = "long thing" 
re = /[a-z]/g 

// blocks 
matches = s.match(re) 

// doesn't block 
matches = [] 
while(m = re.exec(s)) { 
matches.push(m[0]) 
do your time check here 
} 
+0

方法は、非ブロック第2の例でありますか?私は 're.exec(s)'が1回の呼び出しで 's'文字列全体を評価すると考えていました。つまり、' while'ループは1回だけ実行されます。しかし私は間違っている可能性があります。 –

+0

実際には、それをスクラップする - 私は今あなたが意味するものを参照してください。しかし、これは確実に一致間の時間が5秒未満の場合にのみ有効です。つまり、 'while'ループ内のコードは一致が発生したときにのみ実行され、5秒以上が一致した場合には、一致が見つかりました。そうですか? –

+0

おかげさまで、これは公正な点です.Web Workersのブラウザサポートは限られていますが、ソリューションではJavascriptのネイティブ言語機能が使用されていることは明らかです。 –

2

私が考えることができる唯一の方法は、別のスレッドでWebWorkers APIを使用して、メインスレッドのタイマーを使用して 'タイムアウト'を示し、myTimer.terminate();構文を使用してワーカースレッドを強制終了することです。しかし、ワーカースレッドはDOMへのアクセス権を持たず、純粋なメッセージバスのように動作するため、テーブル全体に問題が発生します。

1

JavaScriptで正規表現を評価するのはブロック操作なので、実行の時間とキャンセルの機会はありません。可能な解決策はweb workersを使用することです - しかし、私はそれらの経験がありません。私はあなたが「実行」によって何を意味するかは非常にわからないんだけど、ある特定のケースでは、ループにブロッキング操作を有効にすることが可能です

関連する問題