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 回答