1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| // Node.jsでタイムアウト付き正規表現
const { Worker } = require('worker_threads');
function safeRegex(pattern, input, timeout = 1000) {
return new Promise((resolve, reject) => {
const worker = new Worker(`
const { parentPort } = require('worker_threads');
parentPort.on('message', ({ pattern, input }) => {
const regex = new RegExp(pattern);
parentPort.postMessage(regex.test(input));
});
`, { eval: true });
const timer = setTimeout(() => {
worker.terminate();
reject(new Error('Regex timeout'));
}, timeout);
worker.on('message', (result) => {
clearTimeout(timer);
resolve(result);
});
worker.postMessage({ pattern, input });
});
}
|