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

JavaScript字符串解析:标签与文本拆分及边缘场景处理

解决JavaScript字符串拆分标签与文本的边缘场景问题

需求说明

需要将指定格式的字符串拆分为包含tags数组和text字段的对象:

  • 标准格式:@tag1@tag2@tag3:lorem ipsum quare id...
  • 边缘场景处理:
    1. 标签数量可为0到n个
    2. 无标签时字符串无冒号分隔,需返回默认标签"default"

示例预期输出:

  • @mario:lorem ipsum → {tags:['mario'], text:"lorem ipsum"}
  • @mario@luigi:lorem ipsum → {tags:['mario','luigi'], text:"lorem ipsum"}
  • lorem ipsum → {tags:['default'], text:"lorem ipsum"}

初始代码问题分析

原代码无法处理无冒号的场景(如tmp3):

  • 无冒号时splitTagText返回的数组仅含一个元素,导致tagText[1]为undefined
  • 无标签时extractTags返回空数组,不符合默认标签要求

解决方案

以下是修复后的实现,覆盖所有边缘场景:

function processInput(text) {
  const colonIndex = text.indexOf(':');
  
  // 无冒号的情况:直接返回默认标签和原文本
  if (colonIndex === -1) {
    return { tags: ['default'], text: text.trim() };
  }

  // 有冒号的情况:拆分标签部分与文本部分
  const tagSection = text.slice(0, colonIndex);
  const contentText = text.slice(colonIndex + 1).trim();
  
  // 提取标签并过滤空字符串(避免开头@导致的空元素)
  const tags = tagSection.split('@').filter(tag => tag.length > 0);

  // 若标签数组为空,返回默认标签;否则返回提取的标签
  return {
    tags: tags.length > 0 ? tags : ['default'],
    text: contentText
  };
}

// 测试示例
const tmp1 = '@mario:lorem ipsum';
const tmp2 = '@mario@luigi:lorem ipsum';
const tmp3 = 'lorem ipsum';
const tmp4 = ':empty tag test'; // 额外测试无标签但有冒号的场景

console.log(processInput(tmp1)); // { tags: ['mario'], text: 'lorem ipsum' }
console.log(processInput(tmp2)); // { tags: ['mario', 'luigi'], text: 'lorem ipsum' }
console.log(processInput(tmp3)); // { tags: ['default'], text: 'lorem ipsum' }
console.log(processInput(tmp4)); // { tags: ['default'], text: 'empty tag test' }

逻辑说明

  1. 无冒号判断:通过indexOf(':')检测是否存在冒号,无冒号时直接返回默认标签和原文本
  2. 标签提取:拆分标签部分后,用filter过滤掉拆分产生的空字符串(比如开头@导致的空元素)
  3. 空标签处理:如果标签数组为空(如输入:文本内容),仍返回默认标签,覆盖标签数量为0的场景

内容的提问来源于stack exchange,提问作者giaggi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:50:27