NodeJS 在JavaScript中阅读{{和}} regex之间的任何内容[重复]

fsi0uk1n  于 2023-02-15  发布在  Node.js
关注(0)|答案(3)|浏览(61)
    • 此问题在此处已有答案**:

regex get anything between double curly braces(3个答案)
46分钟前就关门了。
我想使用正则表达式获取{{和}}之间的任何字符串。例如,{{user.email}}应返回user.email。为了实现这一点,我编写了以下正则表达式:

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

这是使用regexp的链接:
https://regex101.com/r/UdbrT9/1
我错过了什么吗?

wpx232ag

wpx232ag1#

从技术上讲,这是在使用lookaheads和lookbehinds。参见Lookahead and Lookbehind Zero-Width Assertions

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

qmelpv7a2#

你为什么不用替换?

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

vatpfxk53#

你的正则表达式看起来是正确的。
但是,实际的“匹配”是完整的字符串。
您需要的是 * 第一个捕获的组 *(括号内)。

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

注意RegExp::exec()的使用(它包含完全匹配+捕获的组。不幸的是String::match()没有,它只返回完全匹配。

相关问题