gpt4 book ai didi

javascript - Javascript 中高效的字符串操作

转载 作者:数据小太阳 更新时间:2023-10-29 05:14:03 25 4
gpt4 key购买 nike

我有一个字符串(HTML 内容)和一个位置(索引)对象数组。字符串长度约160万个字符,位置对象约700个。

即:

var content = "<html><body><div class="c1">this is some text</div>...."
var positions = [{start: 20, end: 25}, {start: 35, end: 37}....]

我必须在字符串中的每个开始位置插入一个开始跨度标记,并在字符串中的每个结束位置插入一个结束跨度标记。

最有效的方法是什么?

到目前为止,我已经尝试对位置数组进行反向排序,然后循环遍历,然后使用替换/拼接插入标签,例如:

content = content.slice(0, endPosition) + "</span>" + content.substring(endPosition);
content = content.slice(0, startPosition) + "<span>" + content.slice(startPosition);

(注意我是如何从末尾开始循环的,以避免弄乱开始/结束位置)。

但这需要大约 3 秒,对我来说这似乎很慢且效率低下。

执行此操作的更有效方法是什么?

最佳答案

与其每次都修改大字符串,不如尝试在新缓冲区中累积处理过的“ block ”:

content = '0123456789'
positions = [
[1, 3],
[5, 7]
]

buf = []
lastPos = 0

for (let [s, e] of positions) {
buf.push(
content.slice(lastPos, s),
'<SPAN>',
content.slice(s, e),
'</SPAN>'
)
lastPos = e
}

buf.push(content.slice(lastPos))


res = buf.join('')
console.log(res)

关于javascript - Javascript 中高效的字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53278614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com