Javascript 使用正则表达式从段落中提取多个{tag}
我有这样的电子邮件模板:Javascript 使用正则表达式从段落中提取多个{tag},javascript,regex,Javascript,Regex,我有这样的电子邮件模板: 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. 2) 整个{}包括段落中的内容 user.firstName
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.
2) 整个{}包括段落中的内容
user.firstName // from {user.firstName}
item // from {item}
orderId // from {{orderId}}
{user.firstName} // from {user.firstName}
{item} // from {item}
{orderId} // from {{orderId}}
对于(1),我尝试了/{(.*)}/g
或/({)(.*)(})/g
,但它仍然会选择整个{{tag}}
以下是我尝试的目标(2):
它可以满足大多数条件,除非{tag}中有一个/多个点
请提前帮助并感谢您。您可以尝试使用以下regexp:
({([\w\.]*)})
在那里,您的匹配将有两个捕获组:
{user.firstName}
user.firstName
您还可以在此处检查该表达式编辑2:基于从@melpomene收到的评论
var reg=/{([\w(.*\w)*]+)}/g;
var string=“{x}亲爱的{user.firstName},
感谢您向我们购买{item}。
您的订单ID是:{{orderId}。
再次感谢您对我们的支持;
var结果=null;
while(结果=reg.exec(字符串))
console.log(结果[1])代码>你的代码在哪里?试试类似({([\w\.]*)})
?这应该可以(?OP应该注意,只有当我们明确地只允许一个或两个括号时,这才有效,因为@J.Pichardo感谢你的回答。经过测试,它可以以非常简单的方式处理我的问题(2)。再次感谢:)如果在string
:“{x}亲爱的{user.firstName},“
@melpomene”的开头添加一个字母标记,那么代码将严重失败。它将匹配{
和}
中的内容,从{
开始到}
的第一次出现(?=})
表示直到第一个正向前瞻,与循环中的中断
相同。您的正则表达式中已经有一个固定的}
<代码>(?=})}
是多余的。@melpomene您现在可以检查一下吗?我编辑了代码并添加了示例。[\d\w]
只是\w
<代码>\w
已包含数字<代码>[.*]在这里毫无意义。它与文本
或文本*
匹配。
/({([a-z])\w+})|({([a-z])+})|({([A-Z])\w+})|({([A-Z])+})|({[0-9]+})/g