You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式匹配文档中跨多行的多条目内容?

匹配跨多行含特定标记的JSDoc注释块

嘿,我完全懂你折腾数小时却摸不着头绪的挫败感——跨多行正则匹配确实是新手容易踩坑的点!针对你要提取包含#start?标记的跨多行JSDoc注释需求,我给你整理了一个实用的解决方案:

核心正则表达式

/\/\*\*[\s\S]*?\* #start\?[\s\S]*?\*\//g

逐段解释(帮你搞懂每部分的作用)

  • /\/\*\*/:精准匹配JSDoc的起始标记/**,这里要转义/和*这两个正则特殊字符
  • [\s\S]*?:非贪婪匹配任意字符(包括换行),*?是关键——它会在找到下一个目标时立刻停止,避免把后续无关的注释也一起匹配进来
  • \* #start\?:匹配包含#start?的那一行,同样要转义*和?这两个特殊字符
  • [\s\S]*?:继续非贪婪匹配,直到找到JSDoc的结束标记
  • \*\//:匹配JSDoc的结束标记*/
  • g:全局匹配标志,确保文档中所有符合条件的注释块都会被找到

实际使用示例

下面是用JavaScript测试的代码,你可以直接套用:

const docContent = `// javascript.js
/**
 * #start?
 * @name myFunction(p1)
 * @desc Description of the function
 * 这里可以是任意多行内容
 */
function myFunction(p1) {
  // 函数逻辑
}

/**
 * 这个注释没有#start?标记,不会被匹配
 * @name otherFunc
 */
function otherFunc() {
  // ...
}`;

// 应用正则
const targetRegex = /\/\*\*[\s\S]*?\* #start\?[\s\S]*?\*\//g;
const matchedBlocks = docContent.match(targetRegex);

console.log(matchedBlocks);
// 输出结果会是第一个完整的含#start?的JSDoc块

额外注意事项

  • 一定要用非贪婪模式(*?),如果换成贪婪的*,正则会从第一个/**直接匹配到最后一个*/,把所有注释都混在一起,这绝对不是你想要的
  • 如果你的文档里存在不符合规范的嵌套注释(正常JSDoc不允许这种情况),这个正则可能会出错,但在常规的JS代码文档场景下完全够用
  • 要是你需要更严格的匹配(比如要求#start?必须是星号后的第一个内容),可以把\* #start\?调整为\* #start\?\s*$,确保它是单独一行的标记

内容的提问来源于stack exchange,提问作者ful-stackz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:01:49