1

私が次のものを持っていると仮定します:

var s = "This is a test of the battle system."

そして、私は配列を持っていました:

var array = [
"is <b>a test</b>",
"of the <div style=\"color:red\">battle</div> system"
]

出力が次のようになるように文字列 s を処理できるようにする関数または方法はありますか。

var p = "This is <b>a test</b> of the <div style=\"color:red\">battle</div> system."

配列内の任意の要素に基づいていますか?

配列要素は順番に実行する必要があることに注意してください。したがって、配列 1 の最初の要素を見て、文字列「s」で「置換」する正しい場所を見つけます。次に、配列要素 2 を見て、文字列「s」で「置換」する正しい場所を見つけます。

文字列には、数字、括弧、およびダッシュなどの他の文字を含めることができることに注意してください (ただし、<> は含まれません)。

4

2 に答える 2

6

更新: Colin DeClue の発言の後、あなたは私が最初に考えていたものとは違うことをしたいと思っていると思います.

これを達成する方法は次のとおりです

//your array
var array = [
    "is <b>a test</b>",
    "of the <div style=\"color:red\">battle</div> system"
];
//create a sample span element, this is to use the built in ability to get texts for tags
var cElem = document.createElement("span");

//create a clean version of the array, without the HTML, map might need to be shimmed for older browsers with a for loop;
var cleanArray = array.map(function(elem){
   cElem.innerHTML =  elem;
   return cElem.textContent;
});
//the string you want to replace on
var s = "This is a test of the battle system."

//for each element in the array, look for elements that are the same as in the clean array, and replace them with the HTML versions
for(var i=0;i<array.length;i++){
  var idx;//an index to start from, to avoid infinite loops, see discussion with 6502 for more information
  while((idx = s.indexOf(cleanArray[i],idx)) > -1){
    s = s.replace(cleanArray[i],array[i]);
    idx +=(array[i].length - cleanArray[i].length) +1;//update the index
  }
}
//write result 
document.write(s);

作業例: http://jsbin.com/opudah/9/edit


結局これがあなたの意図したものである場合に備えて、元の答え

はい。使用するjoin

var s = array.join(" ");

これはcodepenの実例です

于 2013-03-27T21:06:06.643 に答える
0

original --> replacementペア の配列があると思います。 HTML からテキストを抽出するには、実際に DOM ノードを作成してからテキスト コンテンツを抽出する方法が有効です。

テキストを取得したらreplace、正規表現でメソッドを使用できます。escapeJavascript には事前定義された関数がないため、正確な文字列を検索するのは簡単ではありません。

function textOf(html) {
    var n = document.createElement("div");
    n.innerHTML = html;
    return n.textContent;
}

var subs = ["is <b>a test</b>",
            "of the <div style=\"color:red\">battle</div> system"];

var s = "This is a test of the battle system"

for (var i=0; i<subs.length; i++) {
    var target = textOf(subs[i]);
    var replacement = subs[i];
    var re = new RegExp(target.replace(/[\\[\]{}()+*$^|]/g, "\\$&"), "g");
    s = s.replace(re, replacement);
}

alert(s);
于 2013-03-27T21:24:06.853 に答える