请问这样格式的数据,如何以给定的规则,切割字符串

{
        'content': '已为您key1vip服务key2天,客服将为您提供专业解答和制定方案',
        'keywords': [{
          'keyword': 'key1',
          'replaceKeyword': '开启',
          'link': '',
          'color': '',
        }, {
          'keyword': 'key2',
          'replaceKeyword': '30',
          'link': '',
          'color': '',
        }]
      }

转换成以下格式

const _array = [
 {text: '已为您'},
 {text: '开启', link: '', color: ''},
 {text: 'vip服务'},
 {text: '30', link: '', color: ''},
 {text: '天,客服将为您提供专业解答和制定方案'},
]
阅读 1.1k
1 个回答
function transformText(text, keywords) {
  const indexes = keywords.reduce((res, v, i) => (res[v.keyword] = i, res), {})
  const kwReg = RegExp(keywords.map(v => v.keyword).join('|'), 'g');
  const res = [];
  var index = 0;
  text.replace(kwReg, (match, offset) => {
    const kw = keywords[indexes[match]]
    res.push(
      {text: text.slice(index, offset)},
      {text: kw.replaceKeyword, link: kw.link, color: kw.color}
    )
    index = offset+match.length
    return ''
  })
  if(index<text.length) res.push({text: text.slice(index)})
  return res
}
var data = {
        'content': '已为您key1vip服务key2天,客服将为您提供专业解答和制定方案',
        'keywords': [{
          'keyword': 'key1',
          'replaceKeyword': '开启',
          'link': 'baidu.com',
          'color': 'red',
        }, {
          'keyword': 'key2',
          'replaceKeyword': '30',
          'link': 'bing.com',
          'color': 'blue',
        }]
      }

transformText(data.content, data.keywords)

仅用题主的用例通过了,没有完整测试,可能会有问题,可以再多试几个。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题