如何编写正则匹配双大括号内点后带管道分隔符的字符串
正则匹配解决方案
匹配项1(完整匹配大括号块)
正则:/{{\s*\.\s*(?:\|\s*[\w]+\s*)*}}/g
说明:对大括号、点、管道前后的空格完全不敏感,可匹配所有符合规则的{{ ... }}完整块,覆盖所有测试场景。如果管道命名支持下划线以外的特殊字符,可将\w替换为自定义字符集(比如支持横杠则改为[a-zA-Z0-9_-])。
匹配项2(管道相关内容匹配)
方案1:一次性获取所有管道拼接字符串
修改匹配项1的正则增加捕获组即可:/{{\s*\.\s*([^}]+?)}}/g
匹配成功后取第1个捕获组的内容,执行捕获组内容.replace(/^\s*\|\s*|\s*$/g, '')即可得到测试用例要求的管道拼接结果,自动去掉前后多余的管道符和空格。
方案2:单独获取每一个管道名
如果需要把firstPipe、secondPipe分别提取,优先推荐两步法,兼容性更强:
- 先用匹配项1的正则拿到所有符合要求的
{{ ... }}块内容 - 对每个块的内部内容用正则
/\w+(?=\s*(?:\||}}))/g匹配,即可得到所有独立的管道名列表
如果运行环境支持可变长度后行断言(如Chrome 62+、Node.js 9+、Python 3.10+等),也可以用一步正则直接匹配:/(?<={{\s*\.\s*(?:\|\s*)?)[\w]+(?=\s*(?:\||}}))/g
测试验证结果
对应给出的所有测试用例,以上正则均可完全符合预期:
- 无匹配场景:无匹配结果,符合要求
- 无管道场景:仅匹配到完整
{{ . }}块,无管道相关结果,符合要求 - 单/双管道场景、任意空格场景:均可正确匹配完整块、以及对应的管道内容
内容的提问来源于stack exchange,提问作者U. Bulle
相关产品推荐
相关产品推荐

