我有一个很大的文本块,已按换行分隔,因此数组中的每个项目都是一行文本。
我正在遍历这些行并尝试检测行中包含</mark>
但不包含<mark>
的行,如果满足此条件,则它将删除{{1 }}(因为它缺少开始标签)。
</mark>
,并且此控制台日志中仍包含不包含
的文本要非常清楚,预期结果如下:
如果一行是这样的:
final_formatted_log_split = logtext.split("\n");
for (i = 0, l = final_formatted_log_split.length; i < l; i++) {
if (final_formatted_log_split[i].includes("<mark>") === false) {
if (final_formatted_log_split[i].includes("</mark>") === true) {
var removed_mark = final_formatted_log_split[i].replace("</mark>", "");
}
}
}
var final_formatted_log = final_formatted_log_split.join("\n");
console.log(final_formatted_log);
然后它需要删除line of text here</mark>
,因为它不包含开头</mark>
我怀疑这与=== false有关,但是从我在网上阅读的内容来看,这就是其他人使用.includes的方式来查看某些内容是否“不包含”
答案 0 :(得分:2)
您可以使用简单的String.prototype.includes
来做到这一点:
const arr = [
'<mark>1</mark>',
'2</mark>',
'3</mark></mark>',
'<mark>4</mark>',
]
const replaceMark = (arr) => {
return arr.map(e => {
if (e.includes('</mark>') && !e.includes('<mark>')) e = e.replace(/\<\/mark\>/g, '')
return e
})
}
console.log('original:', arr)
console.log('replaced:', replaceMark(arr))
此解决方案无法处理<mark>text</mark></mark>
这样的复杂情况,只能处理最基本的情况。
答案 1 :(得分:1)
===false
没什么问题。它正常工作。要检查这一点,您只需在if块中放入console.log
。
您在这里所做的是,您不是用修改后的值替换数组值。因此,请替换此行
var removed_mark = final_formatted_log_split[i].replace("</mark>", "");
使用
final_formatted_log_split[i] = final_formatted_log_split[i].replace("</mark>", "");
您可以使用一个if
块,而不是两个if块。
var final_formatted_log_split = logtext.split("\n");;
for (i = 0, l = final_formatted_log_split.length; i < l; i++) {
if (!final_formatted_log_split[i].includes("<mark>") && final_formatted_log_split[i].includes("</mark>")) {
final_formatted_log_split[i] = final_formatted_log_split[i].replace("</mark>", "");
}
}
var final_formatted_log = final_formatted_log_split.join("\n");
console.log(final_formatted_log);