Как проверить наличие нечетных чисел обратной косой черты в регулярном выражении с помощью Javascript? - PullRequest
0 голосов
/ 14 мая 2018

Я недавно задал вопрос, касающийся ошибки, которую я получаю, используя конструктор RegExp в Javascript с утверждением lookbehind.

Что я хочу сделать, чтобы проверить ввод числа больше 5, которому предшествует нечетное число обратной косой черты, другими словами, которой не предшествует экранированная обратная косая черта

Вот пример.

\5              // match !
\\5            // no match !
\\\5           // match!

Регулярное выражение, которое я нашел в Интернете:

(?<!\\)(?:\\{2})*\\(?!\\)([5-9]|[1-9]\d)

Но проблема здесь в том, что (?<!\\) вызывает проблему с javascript, генерирующим ошибку недопустимой группы регулярных выражений.

Есть ли обходной путь для этого?

Наконец, я знаю, что в моем текущем регулярном выражении также может быть ошибка, связанная с обнаружением числа больше 5, например, \ 55 не будет совпадать.Буду признателен за вашу помощь.

спасибо

1 Ответ

0 голосов
/ 14 мая 2018

JS не поддерживает внешний вид (по крайней мере, не все основные браузеры), поэтому ошибка. Вы можете попробовать:

(?:^|[^\\\n])\\(?:\\{2})*(?![0-4]\b)\d+

Или, если вам небезразличны десятичные числа:

(?:^|[^\\\n])\\(?:\\{2})*(?![0-4](?:\.\d*)?\b)\d+(?:\.\d*)?

Живая демоверсия

Примечание: вам не нужно \n, если у вас нет многострочного текста.

Распределение регулярных выражений :

  • (?: Начало группы без захвата
    • ^ Начало строки
    • | или
    • [^\\\n] Ничего, кроме обратной косой черты
  • ) Конец группы без захвата
  • \\(?:\\{2})* Соответствует обратной косой черте после ее четного числа
  • (?![0-4](?:\.\d*)?\b) Следующий номер не должен быть меньше 5 (заботиться о десятичных числах)
  • \d+(?:\.\d*)? Совпадение числа

JS код:

var str = `\\5
\\\\5
\\\\\\5
\\\\\\4
\\4.
\\\\\\6
`;

console.log(
  str.match(/(?:^|[^\\\n])\\(?:\\{2})*(?![0-4](?:\.\d*)?\b)\d+(?:\.\d*)?/gm)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...