1

我有以下函数检测文本区域中的匹配,然后删除当前块。

function deleteValue() {
  var name = document.getElementById("name").value;
  var textarea = document.getElementById("result");
  if (textarea.value.match("name"))
  {
    var lines = textarea.value.split('\n');
    lines.splice(3,8);
    var modify = lines.join('\n');
    textarea.value = modify;
  }
}

我希望能够为此添加一些逻辑来检测name文本区域中存在的位置并从该行开始。我应该实现什么javascript方法?

4

1 回答 1

4

您可以将逻辑包装在一个函数中,该函数遍历给定文本的行并返回一个列表,其中行的索引与搜索模式(或确切的搜索词)匹配。
然后,您可以适当地使用这些索引,例如从原始文本中删除这些行。

function findMatches(text, pattern) {
    var matchingLines = [];
    var allLines = text.split("\n");

    for (var i = 0; i < allLines.length; i++) {
        if (allLines[i].match(pattern)) {
            matchingLines.push(i);
        }
    }

    return matchingLines;
}

另请参阅这个简短的演示

需要记住的几点: * 在上面的例子中,“pattern”被 JS 视为一个正则表达式模式,例如“tes”。将匹配“test”、“tess”、“tes6”等。如果您想要文字匹配,请替换allLines[i].match(pattern)allLines[i].indexOf(pattern) != -1. * 假设行以“\n”结尾。如果您的规格不同,请进行相应修改。* 在上面的简短演示中,行查找部分和行删除部分是分开的,导致代码更复杂(为了灵活性)。如果您只想删除匹配的行,您可以一次性完成,如下所示:

function removeMatches(text, pattern) {
    var outputLines = [];
    var inputLines = text.split("\n");

    for (var i = 0; i < inputLines.length; i++) {
        if (!inputLines[i].match(pattern)) {
            outputLines.push(inputLines[i]);
        }
    }

    return outputLines.join("\n");
}
于 2013-07-06T19:39:25.907 回答