no infinite loop on non global regex

This commit is contained in:
Timo Hocker 2020-03-30 11:21:05 +02:00
parent 649e70b200
commit 3ffc1e232b
2 changed files with 31 additions and 4 deletions

View File

@ -53,6 +53,12 @@ function copy_object (obj) {
* @param {any} func function to execute
*/
function run_regex (regex, data, func) {
if (!regex.global) {
const result = regex.exec (data);
if (result)
func (result);
return;
}
let res = regex.exec (data);
while (res) {
func (res);

View File

@ -48,6 +48,27 @@ test ('run regex', (t) => {
util.run_regex (regex, data, (res) => {
t.is (res[0], 'foo');
count++;
})
});
t.is (count, 2);
});
test ('run non-global regex', (t) => {
const data = 'foobarfoo';
const regex = /foo/u;
let count = 0;
util.run_regex (regex, data, (res) => {
t.is (res[0], 'foo');
count++;
});
t.is (count, 1);
});
test ('run non-global regex without result', (t) => {
const data = 'foobarfoo';
const regex = /baz/u;
let count = 0;
util.run_regex (regex, data, (res) => {
count++;
});
t.is (count, 0);
});