文字表格換行取代

文字表格換行取代

by Shang-De You

JavaScript

let article = 'aaa|aa統一超|商1bbbccccc\nccc|商2ccccc統|cc\ncc|一超商3dddddddeeee\neeffffffffgggg\ngghhhhhhiiiiiijj\njjjkkkkkk'

//let keyword1 = '統一超商股份有限公司'
let keyword1 = '統一超商'



//console.log(indexData)
let indexData = returnIndexData(keyword1)
let newArticle = replaceLeftRightText(article, indexData)

// 先建立索引
function returnIndexData (keyword) {
	let indexData = []
  let keywordLength = keyword.length
  let leftCropMaxLength = keywordLength - 1
  for (let n = leftCropMaxLength; n > 0; n--) {
    let rightText = keyword.substring(0, n)
    let leftText = keyword.substring(n, keywordLength)
    indexData.push({
      rightText,
      leftText,
      rightSelector: rightText + '|', // 右側截取索引
      leftSelector: leftText // 左側截取索引
    })
  }
  return indexData
}

function replaceLeftRightText (article, indexData) {
	let lines = article.split('\n')
  lines.forEach((line, lineIndex) => {
  	indexData.forEach(({rightText, rightSelector}, i) => {
    	let texts = line.split(rightSelector)
      // 第一行有找到右關鍵字
      if (texts.length > 1) {
      	let verticleLineCount = texts[0].split('|').length - 1
        // 非最後一行
        if (lineIndex < lines.length) {
        	let nextLine = lines[lineIndex + 1]
          indexData.forEach(({leftText, leftSelector}, i) => {
          	let nextTexts = nextLine.split(leftSelector)
            // 第二行有取到左關鍵字
            if (nextTexts.length > 1) {
              let nextVerticleLineCount = nextTexts[0].split('|').length - 1
              // 第一行和第二行取到的關鍵字左邊的"|"數量一樣(因第二行關鍵字已包含"|"所以需相差1)
              if (verticleLineCount - nextVerticleLineCount == 0) {
                lines[lineIndex] = line.replace(rightSelector, `<em>${rightText}</em>|`)
                lines[lineIndex + 1] = nextLine.replace(leftSelector, `|<em>${leftText}</em>`)
              }
            }
          })
        }
      }
    })
  	
  })
  return lines.join('\n')
}

console.log(newArticle)