小编典典

如果字符串中包含特定文本,如何删除指定文本并使用JS为文本区域中的每一行删除?

all

我需要删除<annot:annotationLevel><annot:body>并且</annot:body></annot:annotationLevel>仅当该行包含“(a)”“(zzz)”时

这是为了看起来像这样的东西:

<annot:annotationLevel><annot:body><p>“(a) Definitions. In this section:</p></annot:body></annot:annotationLevel>
<annot:annotationLevel><annot:body><p>“(1) List of Material Interested Parties. The term “List of Material Interested Parties” means the List of Material Interested Parties established under subsection (c)(1).</p></annot:body></annot:annotationLevel>
<annot:annotationLevel><annot:body><p>“(2) Oversight Board. The term “Oversight Board” has the meaning given the term in section 5 of PROMESA (48 U.S.C. 2104).</p></annot:body></annot:annotationLevel>
<annot:annotationLevel><annot:body><p>“(b) Required Disclosure.</p></annot:body></annot:annotationLevel>

在上面的示例中,(a)和(b)应该annot删除它们的标签,只剩下p标签。

注意:它只适用于小写字母字符,不适用于大写字母。(现在我想知道如何区分 alpha 和罗马数字 (i)、(v) 和 (x),因为它们不应该受到影响,但也许以后再说)

我一直在解决这个问题,但我目前的解决方案由于某种原因无法正常工作。在这一个中,我只尝试使用 RegEx 来定位“(a)”而不是其余的。

function annotationWrapCleanups() {
  let lines = document.querySelector('#textarea3').value.split('\n');
  for (let i = 0; i < lines.length; i++) {
    if (lines[i] !== "" && lines[i].includes('(a) Definitions.')) {
      lines[i].replace('<annot:annotationLevel><annot:body>', '')
      lines[i].replace('</annot:body></annot:annotationLevel>', '')
    }
  }
}
.main-textarea {
  height: 50px;
  width: 99%;
}

.main-textarea:focus {
  outline: none;
}

.cleanup-btn {
  padding: 10px;
  margin-top: 10px;
}
<textarea class="main-textarea annotation-wrap" id="textarea3"></textarea>
<button class="cleanup-btn" onclick="annotationWrapCleanups();">clean</button>

无论如何,提前感谢您的帮助,任何见解将不胜感激!


阅读 92

收藏
2022-08-05

共1个答案

小编典典

检查该行是否与 Regex 匹配/<p>“\([a-z]+\)/

我们匹配的字符串应该:

  • <p>"

从这个开始。所以我们正在查看元素文本内容的开头。

  • 这样可以避免匹配(c)第二行中的内容

  • \(

匹配一个左括号。

  • \是逃避(通常在正则表达式中所做的事情。

  • [a-z]+匹配一个或多个小写字母

  • \)匹配右括号

结合使用这个数字和罗马数字将是一个完全不同的野兽,因为最简单的问题是,你怎么知道它是 (i) 字母还是 (i) 在一个中。

我在片段中为您设置了它,只需单击清理并检查结果是否符合您的要求。我在清理后添加了额外的换行符,以使其更清晰可见。

function annotationWrapCleanups() {
  const textArea = document.querySelector('#textarea3')
  let lines = textArea.value.split('\n');
  for (let i = 0; i < lines.length; i++) {
    if (lines[i].match(/<p>“\([a-z]+\)/g)) {
      lines[i] = lines[i].replace('<annot:annotationLevel><annot:body>', '')
      lines[i] = lines[i].replace('</annot:body></annot:annotationLevel>', '')
    }
  }
  textArea.value = lines.join('\r\n\n')
}

document.querySelector('#textarea3').value = `<annot:annotationLevel><annot:body><p>“(a) Definitions. In this section:</p></annot:body></annot:annotationLevel>
<annot:annotationLevel><annot:body><p>“(1) List of Material Interested Parties. The term “List of Material Interested Parties” means the List of Material Interested Parties established under subsection (c)(1).</p></annot:body></annot:annotationLevel>
<annot:annotationLevel><annot:body><p>“(2) Oversight Board. The term “Oversight Board” has the meaning given the term in section 5 of PROMESA (48 U.S.C. 2104).</p></annot:body></annot:annotationLevel>
<annot:annotationLevel><annot:body><p>“(b) Required Disclosure.</p></annot:body></annot:annotationLevel>`
.main-textarea {
  height: 50px;
  width: 99%;
}

.main-textarea:focus {
  outline: none;
}

.cleanup-btn {
  padding: 10px;
  margin-top: 10px;
}
<textarea class="main-textarea annotation-wrap" id="textarea3"></textarea>
<button class="cleanup-btn" onclick="annotationWrapCleanups();">clean</button>
2022-08-05