Разница между Peg.js и Regex - PullRequest
       13

Разница между Peg.js и Regex

0 голосов
/ 27 сентября 2018

Я бы хотел использовать Peg.js для анализа и проверки того, что я делал с регулярными выражениями и борюсь с синтаксисом.

Моя программа Peg.js:

start = (var / other) cr 
d:var {return d.join('')}

var = [^(?=.{1,32}$)([a-zA-Z_][a-zA-Z0-9_]*)$] {return "OK"}
other = . {return "NOT OK"}
cr = "\n"

И я проверяю это со следующим текстом:

test1
no space
1var
_temp
ReallyLongNameisInvalidandLongerthan32
IncorrectChars!!asdf
_
underscore_is_fine_

Я ожидаю результатов ДА, НЕТ, НЕТ, ДА, НЕТ, НЕТ, ДА, ДА, но я собираюсь по кругу сошибки регулярного выражения, которые обычно работают нормально.

1 Ответ

0 голосов
/ 27 сентября 2018

Если правило разметки не соответствует, оно будет пытаться сопоставить следующее правило, пока не истечет срок действия правил.Попробуйте что-нибудь вроде этого:

start = line+

line = d:(var / other)
{
    return d;
}

var = v:$([a-zA-Z_][a-zA-Z0-9_]*) cr
{
    if (v.length > 32) {
        return "no";
    } else {
        return "yes";
    }
}

other = [^\n]+ cr
{
    return "no";
}

cr = "\n"

Вывод:

[
   "yes",
   "no",
   "no",
   "yes",
   "no",
   "no",
   "yes",
   "yes"
]
...