返回match()Javascript上的行号

时间:2013-07-06 15:29:28

标签: javascript html

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

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;
  }
}

我希望能够为此添加一些逻辑来检测textarea中存在name的位置并从该行开始。我应该使用哪种javascript方法?

1 个答案:

答案 0 :(得分: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;
}

另请参阅此 short demo

要记住以下几点: *在上面的例子中,“模式”被JS视为正则表达式模式,例如“工商业污水附加费。”将匹配“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");
}