Может ли статический анализатор javascript-кода проверить, что регулярное выражение будет давать совпадение на любой строке?
s.match(/\w*/)[0] // valid
s.match(/\w+/)[0] // invalid
s.match(/id(\d{7})/)[1] // invalid
s.match(/id(\d{7})|$/)[1] // valid
Есть может, то есть ли уже такой плагин для какого-либо анализатора?
PS: Этот вопрос на английском.
Если регулярное выражение дает совпадение с позицией, началом текста и концом текста, то оно valid, потому что эти три возможных варианта совпадений присутствуют в любом тексте.
Позиция это:
Во всех остальных случаях всегда можно найти текст, который не даст совпадений на регулярном выражении.
Анализ регулярного выражения следует проводить следующим образом: сначала надо проверить совпадет ли регулярное выражение с пустой строкой. Если не совпадет, то оно invalid, если совпадет, то необходимо построить AST регулярного выражения, выделить всё, что описывает литералы и найти такой литерал, который НЕ указан в регулярном выражении.
То есть для [^abc]
таким литералом будет a
, b
и c
. Для [a-z]
таким литералом будет любой литерал не входящий в этот диапазон.
Если такой литерал найти не удалось, то мы не смогли решить задачу и я бы предложил бросить попытки анализа и считать регулярное выражение invalid.
Если такой литерал найти удалось, то применяем регулярное выражение к тексту, состоящему из минимум двух таких литералов.
Если совпадение есть, то регулярное выражение valid, если нет, то invalid.
вместе с гуглом решила вот так
Нужно сделать калькулятор выгоды по простой формуле: Формула расчет прибыли: 2300 * количество заказов * 0,27
Можно ли при помощи AJAX вернуть сразу несколько массивов? Не нашёл решения, подскажите как можно решить такую задачу ? (или всё объединять в один,...
На странице истории Google Chrome, все ссылки хранятся в так называемом «Shadow DOM»: