Browse Source

fix: regex expressions distorted in code block (#16690)

诗浓 1 month ago
parent
commit
af5d6ca27d
1 changed files with 12 additions and 2 deletions
  1. 12 2
      web/app/components/base/markdown.tsx

+ 12 - 2
web/app/components/base/markdown.tsx

@@ -66,12 +66,22 @@ const preprocessLaTeX = (content: string) => {
   if (typeof content !== 'string')
     return content
 
-  return flow([
+  const codeBlockRegex = /```[\s\S]*?```/g
+  const codeBlocks = content.match(codeBlockRegex) || []
+  let processedContent = content.replace(codeBlockRegex, 'CODE_BLOCK_PLACEHOLDER')
+
+  processedContent = flow([
     (str: string) => str.replace(/\\\[(.*?)\\\]/g, (_, equation) => `$$${equation}$$`),
     (str: string) => str.replace(/\\\[(.*?)\\\]/gs, (_, equation) => `$$${equation}$$`),
     (str: string) => str.replace(/\\\((.*?)\\\)/g, (_, equation) => `$$${equation}$$`),
     (str: string) => str.replace(/(^|[^\\])\$(.+?)\$/g, (_, prefix, equation) => `${prefix}$${equation}$`),
-  ])(content)
+  ])(processedContent)
+
+  codeBlocks.forEach((block) => {
+    processedContent = processedContent.replace('CODE_BLOCK_PLACEHOLDER', block)
+  })
+
+  return processedContent
 }
 
 const preprocessThinkTag = (content: string) => {