找出正则表达式以避免灾难性的回溯

时间:2018-06-07 20:12:20

标签: javascript regex

如何在JavaScript(运行时=浏览器)中为Regex调用添加超时,以便它不会灾难性地回溯?我只找到NodeJS和其他语言的解决方案,但不是JavaScript。有谁知道一个好的解决方案?

1 个答案:

答案 0 :(得分:4)

您可以在浏览器中启动Web worker,并在任何时候终止它。以下示例演示了在工作程序运行完所有内容之前终止它:

(我是从blob创建一名工作人员用于演示目的。此外,这是在Chrome中完成的,可能需要一些特定于浏览器的更改才能在其他浏览器中使用,例如shown in this question

const workerScript = `
    setTimeout(function () {
	  postMessage('You will see this');
    }, 1000);
    setTimeout(function () {
	    postMessage('You will NOT see this');
    }, 5000);
`;

const blob = new Blob([workerScript], {type: 'application/javascript'});
const worker = new Worker(URL.createObjectURL(blob));

worker.onmessage = function(e) {
  console.log(e.data);
};

// You will only see ONE log from the worker
// if you change the timeout (ex. 6000), you will see two
setTimeout(() => {
  worker.terminate();
}, 3000);