У меня есть строка, и я хочу получить массив с индексами (позициями) символов в этой строке, которые не соответствуют определенным критериям регулярного выражения.
Проблема в том, что если янапишите это так:
let match;
let reg = /[A-Za-z]|[0-9]/g;
let str = "1111-253-asdasdas";
let indexes = [];
do {
match = reg.exec(str);
if (match) indexes.push(match.index);
} while (match);
Это работает.Возвращает индексы всех символов, которые являются числовыми или алфавитными.Но проблема в том, что если я попытаюсь сделать обратное, с отрицательным взглядом в Regex, как это:
let match;
let reg = /(?!([A-Za-z]|[0-9]))/g;
let str = "1111-253-asdasdas";
let indexes = [];
do {
match = reg.exec(str);
if (match) indexes.push(match.index);
} while (match);
Это заканчивается бесконечным циклом.
Что бы яКак достичь, тот же результат, что и в первом случае, но с отрицательным регулярным выражением, поэтому в этом случае результат будет следующим:
indexes = [4, 8]; // which are the indexes in which a non-alphanumerical character appears
Является ли цикл неправильным, или это выражение регулярного выражения - тот, ктовсе портит?Может быть, exec
не работает с выражениями Regex с отрицательными взглядами?
Я бы понял, что выражение Regex работает не так, как я хотел (потому что оно может быть неправильно отформатировано), но я не понимаю бесконечный циклЭто заставляет меня думать, что exec
возможно, это не лучший способ достичь того, что я ищу.