示例字符串:
Hi,
{{name}} from {{place}} has closed your leave application (#2473)
此处正则表达式应与全局大括号前后的单词匹配。
例如。
对于 {{name}} ,它应该与 hi 和 from 相匹配。
对于 {{place}} ,它应该与 from 和 has 相匹配。
我写的正则表达式:
/([^\ ]+?)? +?({{.+?}})[ \n]+([^\ {]+)?/iug
如果两个curley支撑项之间的单词不止一个,则此匹配正确。如果只有1个字,则会引起问题。
当前
对于 {{name}} ,它与 hi 和 from 相匹配。 -这是正确的
对于 {{place}} ,它与已相匹配。 -这是错误的,它也应该与 from 相匹配
REGEX101链接
示例原始文本
Hi,
Vinod Sai from hyderabad has closed your leave application (#2473)
答案 0 :(得分:1)
您可以像这样将最后一部分括在正面的前瞻中:
(?:(\S+)\s+)?({{.*?}})(?=(?:\s+(\S+))?)
请参见regex demo
详细信息
(?:(\S+)\s+)?
-一个可选的非捕获组,它将匹配1个或0个出现的1+个非空白字符(捕获到第1组),然后匹配1+个空白字符({{.*?}})
-第2组:{{
,除换行符以外的任何0+字符,应尽可能少(?=(?:\s+(\S+))?)
-正向超前,在将非空白字符捕获到第3组中时,将需要在当前位置的右侧紧接一个可选的1+个空白字符和1+个非空白字符的顺序,但是强制正则表达式索引必须保持在尝试匹配超前模式之前的位置,因为超前是零宽度断言。