2

文字列と一致しない最初の行だけを見つける必要があります-すべてを見つけるよりも簡単かもしれません。これまでに見つけた唯一の解決策は、文字列を含む行を削除してから、残りを選択することでした。

たとえば、次のテキストでは、文字列を含まない行を見つける必要があります。"line"これは4行目になりますLazy Bear

1行
目2行
目3行目
レイジーベア

それをテストする最も簡単な方法はブックマークレットにあったので、ここにあります:

var myText = "First line" + "\n";
var myText = myText + "Second line" + "\n";
var myText = myText + "Third line" + "\n";
var myText = myText + "Lazy Bear" + "\n";

var p = prompt("My Text = ", myText);

var x = myText.replace(/.*line.*/g, "");
var x = x.replace(/\n/g, "");
var p = prompt("Result:", x);

ノート:

  1. 「プロンプト」行はデバッグのみを目的としています

  2. ブックマークレットで「varmyvar=..」ではなく「myvar=..」のみを使用すると、現在のページが変更され、変数が出力されます。)。

4

5 に答える 5

4

正規表現/^(?!.*line).*$/mは、パターン「line」を含まない行と一致します。

次のコードはnull、そのような行がない場合、または最初の行がない場合に返されます。

myText.match(/^(?!.*line).*$/m);

完全なコードは次のようになります。

var x = (myText.match(/^(?!.*line).*$/m)||['no result found'])[0];
于 2013-02-19T00:45:40.850 に答える
1

答えのどれもこれについて言及していないので:

str.match(/^(?!.*line).*$/gm);

mフラグは、文字列全体ではなく、行の開始と終了^$一致します。

改行文字が一致し.ないため、負の先読みが同じ行に含まれています。

文字列が。で終わる場合、\nその空の文字列は別の行であるため、結果の最後の要素として空の文字列が存在することに注意してください。これは完全に正常です。空でない文字列のみをキャッチしたい場合(入力文字列の途中でも)、正規表現に小さな変更を加えることができます。

str.match(/^(?!.*line).+$/gm);

*からに変更する+と、正規表現が空でない行と一致するように強制されます。

于 2013-02-19T04:31:22.667 に答える
0

あなたがそれで何をしているのかわからなかったので、私はプロンプトのものをスキップしました。

var myText = "First line" + "\n";
var myText = myText + "Second line" + "\n";
var myText = myText + "Third line" + "\n";
var myText = myText + "Lazy Bear" + "\n";
var myTextAsArrayOfLines = myText.split("\n");
for(var i = 0; i < myTextAsArrayOfLines.length; i++)
{
  if(myTextAsArrayOfLines[i].indexOf("line") === -1)
  {
    window.alert("The first line that didn't contain 'line' was " + ((i + 1) + '');
    //end looping
    i = i.length;
  }
}
于 2013-02-19T00:32:59.803 に答える
0
var myText = "First line" + "\n";
var myText = myText + "Second line" + "\n";
var myText = myText + "Third line" + "\n";
var myText = myText + "Lazy Bear" + "\n";
var p = prompt("My Text = ", myText);

var lines = myText.split("\n"), result; // split the text into an array to loop through it

for(var i = 0, len = lines.length; i < len; i++) {
    if(lines[i].indexOf("line") < 0) { // if we find a line that doesn't match
        result = lines[i];
        break; // if we find a result break the loop
    }
}

console.log("Result: " + result); // log the line containing the result
于 2013-02-19T00:34:20.383 に答える
0

行を分割してから\n、Array.filterメソッドを使用して、一致しない行のみを取得できます。

myText.split("\n").filter(function (elem) {
    return elem.indexOf(p) === -1;
});

http://jsfiddle.net/ExplosionPIlls/S7B5f/1/

于 2013-02-19T00:35:12.380 に答える