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」とする。仕様が異なる場合は、それに応じて変更してください。* 上記の短いデモでは、行検索部分と行削除部分が分離されているため、コードがより複雑になります (柔軟性のため)。一致する行のみを削除する場合は、次のように 1 回のパスでこれを実現できます。

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 に答える