如果阵列项目包含字串,但不包含其他字串,则移除字串

时间:2019-10-17 08:25:20

标签: javascript

我有一个很大的文本块,已按换行分隔,因此数组中的每个项目都是一行文本。

我正在遍历这些行并尝试检测行中包含</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的方式来查看某些内容是否“不包含”

2 个答案:

答案 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);