如何编写匹配JSDoc注释块内标签且截止到下一个标签的JavaScript正则表达式
问题原因
你当前正则的问题在于描述部分没有设置停止边界,哪怕用非贪婪模式[\s\S]*?也没有指定终止匹配的条件,所以会一直匹配到整个字符串末尾。
调整后的正则
开启全局匹配g和多行匹配m标志后,使用负向先行断言控制描述的终止位置:
/^\/{3} @(?<tag>\w+)(?:[ \t]+{(?<type>[^}]*)})?(?:[ \t]+(?<name>\w+))(?:[ \t]+(?<desc>(?:(?!^\/{3} @)[\s\S])*))?/gm
关键调整说明
- 新增
g和m标志:g支持匹配注释块内所有标签,m让^可以匹配每一行的开头位置。 - 类型匹配优化:将
type分组内的.*改为[^}]*,避免匹配超出}的范围,如果你需要支持{Array<string>}这类带嵌套括号的类型,可以把type部分的规则替换为{(?<type>(?:[^{}]+|{[^}]*})*)}。 - 描述匹配边界控制:描述分组
desc使用了(?:(?!^\/{3} @)[\s\S])*规则,本质是每次匹配任意字符前都会检查后续是否出现下一个标签的起始标记/// @,如果出现就终止匹配,完美符合你要在下一个标签开头停止的需求。
匹配效果
用你提供的示例测试,会正确匹配出4个标签,第一个标签的描述仅包含:
description /// description continue /// another description line
不会吞掉后续的其他标签内容。
内容的提问来源于stack exchange,提问作者xDGameStudios
相关产品推荐
相关产品推荐

