fix: embedding params escape

This commit is contained in:
jialin
2025-06-18 15:03:35 +08:00
parent 9295f9cef3
commit 3e76d7c321
8 changed files with 76 additions and 30 deletions
+52 -16
View File
@@ -32,24 +32,60 @@ export function escapeDollarNumber(text: string) {
return escapedText;
}
export function escapeBrackets(text: string) {
const pattern =
/(```[\S\s]*?```|`.*?`)|\\\[([\S\s]*?[^\\])\\]|\\\((.*?)\\\)/g;
return text.replaceAll(
pattern,
(match, codeBlock, squareBracket, roundBracket) => {
if (codeBlock) {
return codeBlock;
} else if (squareBracket) {
return `$$${squareBracket}$$`;
} else if (roundBracket) {
return `$${roundBracket}$`;
}
return match;
}
export function escapeBrackets(text: string): string {
const codeRegex = /```[\s\S]*?```|`[^`\n]+`/g;
const codeBlocks: string[] = [];
const placeholder = '%%CODE_BLOCK%%';
// 1. replace code blocks with a placeholder
// and store them in an array
const temp = text.replace(codeRegex, (match) => {
codeBlocks.push(match);
return placeholder;
});
// 2. repace \[...\] with $$...$$and replace \(...\) with $...$
const replaced = temp
.replace(/\\\[([\s\S]*?)\\\]/g, (_, inner) => `$$${inner}$$`)
.replace(/\\\(([\s\S]*?)\\\)/g, (_, inner) => `$${inner}$`);
// 3. restore code blocks from the placeholder
let i = 0;
return replaced.replace(
new RegExp(placeholder, 'g'),
() => codeBlocks[i++] || ''
);
}
export function escapeMhchem(text: string) {
export function escapeMhchem_2(text: string) {
return text.replaceAll('$\\ce{', '$\\\\ce{').replaceAll('$\\pu{', '$\\\\pu{');
}
export function escapeMhchem(text: string): string {
const codeRegex = /```[\s\S]*?```|`[^`\n]+`/g;
const codeBlocks: string[] = [];
const placeholder = '%%CODE_BLOCK%%';
// 1. Replace code blocks with a placeholder
const temp = text.replace(codeRegex, (match) => {
codeBlocks.push(match);
return placeholder;
});
// 2. Only perform \ce{} / \pu{} escaping inside $...$ (to avoid incorrect escaping outside math environments)
const mathRegex = /\$(.+?)\$/gs;
const escaped = temp.replace(mathRegex, (_, content) => {
const fixed = content
.replace(/(?<!\\)\\ce\{/g, '\\\\ce{')
.replace(/(?<!\\)\\pu\{/g, '\\\\pu{');
return `$${fixed}$`;
});
// 3. Restore code blocks
let i = 0;
return escaped.replace(
new RegExp(placeholder, 'g'),
() => codeBlocks[i++] || ''
);
}