Чтение чего-либо между {{ и }} regex в JavaScript

Я хотел бы получить любую строку между {{ и }} с помощью Regex. например, {{user.email}} должен вернуть user.email. Для этого я написал следующее регулярное выражение:

const str = '{{user.email}}'
const regExp = /{{([^]*?)}}/g
const variableName = str.match(regExp)
console.info(variableName) // returns ['{{user.email}}'] only not 'user.email'

Это ссылка для рабочего регулярного выражения:

Https://regex101.com/r/UdbrT9/1

Я что-то пропустил?

Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
1
0
55
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Почему вы не используете замену?

string.replace(/{{|}}/g, '') or replaceAll

Ваше регулярное выражение выглядит правильно.

Однако фактическим «совпадением» является полная строка.

Вам нужна первая захваченная группа (в скобках).

const str = "{{user.email}}";
const regexp = /{{([^]*?)}}/g
const match = regexp.exec(str);
console.info(match[1]); // First captured group in match

Обратите внимание на использование RegExp::exec() (который содержит полное совпадение + захваченную группу. К сожалению, String::match() этого не делает, он просто возвращает полное совпадение.

Ответ принят как подходящий

Технически это использование просмотра вперед и назад. См. Утверждения нулевой ширины с просмотром вперед и назад.

const str = '{{user.email}}test{{tos}}{{done}}'
const regExp = /(?<=\{\{)(.*?)(?=\}\})/g
const variableName = str.match(regExp);
console.info(variableName)

Другие вопросы по теме