соответствовать чему-то, за чем не следуют И чему предшествует - PullRequest
1 голос
/ 26 февраля 2020

Я хочу сопоставить каждый символ "e", который не является частью нотации Scientifi c e (например, 3e + 6) в квадратных скобках. Я могу сделать обратное без проблем: /(?<=\(\d)e(?=[+-]\d+\)/)
Проблема в том, что, если я пытаюсь это сделать (/(?<!\(\d+)e(?![+-]\d+\))/), он не совпадает, как только первая или последняя часть не совпадает (не и).

Короче говоря, он должен соответствовать e в:

23e+4
4e
e
e+5)
(4e

, но не в:

(23e+5)

(или соответствовать любому e, который не соответствует этому /\(\d+e[+-]\d+\)/)

Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Поскольку ваш исходный шаблон -

\(\d+e[+-]\d+\)

Чтобы инвертировать этот тип логи c, вы можете переключаться между:

  • отрицательный взгляд за \(\d+, затем совпадение для e и
  • совпадение для e, за которым следует отрицательный прогноз на [+-]\d+\):
(?<!\(\d+)e|e(?![+-]\d+\))

https://regexr.com/4v3sg

0 голосов
/ 26 февраля 2020

Решением без регулярного выражения может быть что-то вроде этого

  1. Проверьте, начинается ли строка с ( и заканчивается ), затем возвращает false
  2. Если нет, то проверьте, он имеет e в нем или не возвращает логическое значение соответственно

let arr = [`23e+4`,`4e`,`e`,`e+5)`,`(4e`,`(23e+5)`]

let checker = v =>
  v.startsWith('(') && v.endsWith(')') ? 'false' : v.includes('e')

arr.forEach(v => console.log(checker(v)))
...