Я хотел бы получить любую строку между {{ и }} с помощью 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
Я что-то пропустил?
Почему вы не используете замену?
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)