merge: fix/origin-name-mixed-bracket-dev into develop (local only, not pushed)

This commit is contained in:
yeuimu
2026-08-29 02:36:26 +08:00
2 changed files with 20 additions and 16 deletions
@@ -56,6 +56,14 @@ describe('parseOriginName', () => {
expect(r.warehouseLabel).toBeNull(); expect(r.warehouseLabel).toBeNull();
}); });
it('半角/全角括号混用(美国(不包邮)…)按混合对解析', () => {
const r = parseOriginName('美国(不包邮)女士高弹中长款瑜伽运动裤-JSD004-单面印花-美西洛杉矶一仓');
expect(r.country).toBe('美国');
expect(r.logisticsLabel).toBe('不包邮');
expect(r.productName).toBe('女士高弹中长款瑜伽运动裤');
expect(r.skuCode).toBe('JSD004');
});
it('一段名/空值/null 安全', () => { it('一段名/空值/null 安全', () => {
expect(parseOriginName('随便一个名字').skuCode).toBeNull(); expect(parseOriginName('随便一个名字').skuCode).toBeNull();
expect(parseOriginName('随便一个名字').country).toBe('随便一个名字'); expect(parseOriginName('随便一个名字').country).toBe('随便一个名字');
@@ -26,24 +26,20 @@ const EMPTY: ParsedOriginName = {
}; };
function splitSegment1(seg: string): Pick<ParsedOriginName, 'country' | 'logisticsLabel' | 'productName'> { function splitSegment1(seg: string): Pick<ParsedOriginName, 'country' | 'logisticsLabel' | 'productName'> {
const pairs: Array<[string, string]> = [ // SDS 上游名称存在半角/全角括号混用(如 `美国(不包邮)…`),先归一成全角再配对
['', ''], const normalized = seg.replace(/\(/g, '').replace(/\)/g, '');
['(', ')'], const openAt = normalized.indexOf('');
];
for (const [open, close] of pairs) {
const openAt = seg.indexOf(open);
if (openAt >= 0) { if (openAt >= 0) {
const closeAt = seg.indexOf(close, openAt); const closeAt = normalized.indexOf('', openAt);
if (closeAt > openAt) { if (closeAt > openAt) {
return { return {
country: seg.slice(0, openAt).trim() || null, country: normalized.slice(0, openAt).trim() || null,
logisticsLabel: seg.slice(openAt + 1, closeAt).trim() || null, logisticsLabel: normalized.slice(openAt + 1, closeAt).trim() || null,
productName: seg.slice(closeAt + 1).trim() || null, productName: normalized.slice(closeAt + 1).trim() || null,
}; };
} }
} }
} return { country: normalized.trim() || null, logisticsLabel: null, productName: null };
return { country: seg.trim() || null, logisticsLabel: null, productName: null };
} }
export function parseOriginName(name: string | null | undefined): ParsedOriginName { export function parseOriginName(name: string | null | undefined): ParsedOriginName {