使用正则表达式从段落中提取多个 {tag}



我有看起来像这样的电子邮件模板:

Dear {user.firstName},<br><br> Thank you for buying {item} with us. <br><br>
Your Order ID is : <b> {{orderId}} </b>. <br><br>
Thank again for supporting us.

以下是我试图从该段落中提取的示例:

1(段落中{}内的东西

user.firstName // from {user.firstName}
item // from {item}
orderId // from {{orderId}}

2(整个{},包括段落中的内容

{user.firstName} // from {user.firstName}
{item} // from {item}
{orderId} // from {{orderId}}

对于 (1(,我尝试使用/{(.*)}/g/({)(.*)(})/g但它仍然会选择整个 {{tag}}。

以下是我尝试过的(2(:

/({([a-z])w+})|({([a-z])+})|({([A-Z])w+})|({([A-Z])+})|({[0-9]+})/g

它可以满足大多数标准,除非 {tag} 中有一个/多个点。

请帮助并提前感谢您。

您可以尝试使用以下正则表达式:

({([w.]*)})

在那里,您的匹配将有两个捕获组:

  1. 完全匹配,带牙套,就像{user.firstName}
  2. 无论布兰斯里面有什么,比如user.firstName

您也可以在此处检查该表达式 https://regex101.com/r/eXKJzs/1/

Edit 2 : 根据收到的@melpomene评论

var reg = /{([w(.*w)*]+)}/g;
var string = "{x}Dear {user.firstName},<br><br> Thank you for buying {item} with us. <br><br>Your Order ID is : <b> {{orderId}} </b>. <br><br> Thank again for supporting us.";
var result = null;
while(result = reg.exec(string))
console.log(result[1]);

最新更新