文字表格換行取代
文字表格換行取代
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)