1

"Line1\nLine2\nLine3..."文字列内のすべての行 ( ) をチェックし、重複行がある場合は 1 つだけ残して br タグを無視するJavaScript でスクリプトを作成する方法は?

var s = "Hello world\n<BR>\nThis is some text\nThis is some text\n<BR>\nThis is some text"
line1 = "Hello world"
line2 = "<BR>"
line3 = "This is some text"
line4 = "This is some text"
line5 = "<BR>"
line6 = "This is some text"

var result = "Hello world\n<BR>\nThis is some text\n<BR>"
line 1 = "Hello world"
line 2 = "<BR>"
line 3 = "This is some text"
line 4 = "<BR>"
4

3 に答える 3

1
var pieces = s.split("\n"); //This will split your string
var output = []; //Output array

for (var i = 0; i < pieces.length; i++) { //Iterate over input...

   if (pieces[i] == '<BR>' || output.indexOf(pieces[i]) < 0) { //If it is <BR> or not in output, add to output
      output.push(pieces[i]);
   }

}

var newS = output.join("\n"); //Concatenates the string back, you don't have to do this if you want your lines in the array

ここに jsFiddle があります: http://jsfiddle.net/7s88t/

ご存じのとおり、関数は出力配列indexOfの位置を返します。pieces[i]見つからない場合は、 を返します-1。そのため、ゼロ未満かどうかを確認します。

私が助けてくれることを願っています。

編集

あなたが要求したように、小文字を取るために:

if (pieces[i].toLowerCase() == '<br>' || pieces[i].toLowerCase() == '<br/>' || pieces[i].toLowerCase() == '<br />' || output.indexOf(pieces[i]) < 0) {
于 2013-06-06T23:33:58.490 に答える
0

1) テキストを改行で配列に分割します。

var arr = s.split("\n");

2) 重複するエントリをすべて削除します。

var str;
for(var i=0; i<arr.length; i++) {
    str = arr[i];
    //Takes into account all bad forms of BR tags. Note that in your code you are using
    //invalid br tags- they need to be <br /> (self-closing)
    if(inArray(str, arr) && str != "<br>" && str != "<br/>" && str != "<br />"){
        arr.splice(i, 1);
    }
};

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;
}

3) それらを文字列に戻します

//Note joining with newline characters will preserve your line outputs :)
var output = arr.join("\n"); 

このアプローチは、正規表現の使用を回避し、タグを考慮する必要さえなく、<br />ネイティブ JS を使用するため、好きな場所に置くことができるため、優れています。私はこのコードをテストしませんでした。エラーが含まれている可能性があるため、書き出しました。しかし、それは良い出発点になるはずです。乾杯!

于 2013-06-06T23:37:56.527 に答える