如何在正则中嵌套子正则,匹配双大括号内美元符及竖线后对应内容
解决方案
你可以直接使用以下正则:
/{{\s*\$([^}| ]+)(?:\s*\|\s*([^}]+))?\s*}}/g
匹配规则说明
- 捕获组1对应你需要的第一类内容:
$后的变量名字符串 - 捕获组2对应你需要的第二类内容:首个
|之后的所有可选管道内容,没有竖线的场景下该捕获组为 undefined - 如果你需要单独匹配无竖线的场景,直接删掉
(?:\s*\|\s*([^}]+))?这段可选逻辑即可,和你原有单独匹配的正则逻辑完全兼容
测试用例验证
所有你给出的测试场景都可以正确匹配:
- 匹配
{{ $name }}:捕获组1为name,捕获组2无结果,符合预期 - 匹配
{{ $name | pipe1 | pipe2 }}:捕获组1为name,捕获组2为pipe1 | pipe2,符合预期 - 匹配
{{ $name | singlePipe }}:捕获组1为name,捕获组2为singlePipe,符合预期 - 匹配
{{ $ whitespaceBeforeDollar | singlePipe }}:$后存在空格,无法匹配变量名规则,无捕获结果,符合预期 - 匹配
{{ noDollar | pipe1 | pipe2 }}:无$标识,无捕获结果,符合预期 - 匹配
{{ $name textWithoutPipe }}:变量名后存在非竖线的其他文本,不符合规则,无捕获结果,符合预期 - 匹配
{{$whiteSpace | tolerated}}:捕获组1为whiteSpace,捕获组2为tolerated,符合预期 - 匹配
{{$whiteSpace|tolerated}}:捕获组1为whiteSpace,捕获组2为tolerated,符合预期
内容的提问来源于stack exchange,提问作者U. Bulle
相关产品推荐
相关产品推荐

