用javascript替换模板中的文本

时间:2019-04-30 12:32:56

标签: javascript regex

我在收据上工作。

我有一个html模板为:

var Mytemplate= "Test Receipt
The receipt will be used tomorrow.
##start##  A
   B   C
   D
##end##
Here is more text"

在运行时,我需要将所有内容从'## start ##'替换为'## end ##',包括将这些术语替换为其他字符串。

我正在使用下一个代码提取文本:

String.prototype.extract = function(prefix, suffix) {
    s = this;
    var i = s.indexOf(prefix);
    if (i >= 0) {
        s = s.substring(i + prefix.length);
    }
    else {
        return '';
    }
    if (suffix) {
        i = s.indexOf(suffix);
        if (i >= 0) {
            s = s.substring(0, i);
        }
        else {
          return '';
        }
    }
    return s;
    };

var extracted_text=Mytemplate.extract("##start##","##end##");
var newContent=function(){
    var newText=make_something_with(extracted_text)  
    return newText||"This is my new content"
  }

如何用newContent替换从'## start ##'到'## end ##'的内容? 使用Regex可以使这项任务更好吗?

1 个答案:

答案 0 :(得分:1)

您可以利用String对象的substr()方法来获取字符串中## start ##和## end ##的起始索引,复制所需的部分并使用##之前的文本创建一个新字符串开始##,新文本和## end ##之后的文本。

var Mytemplate = "Test Receipt The receipt will be used tomorrow.##start##  A   B   C   D##end##Here is more text"
function replace(text, start, end, newText) {
  var tempString = text.substr(0, text.indexOf(start));
  var tempString2 = text.substr(text.indexOf(end) + end.length, text.length)
  return tempString + newText + tempString2;
}
console.log(Mytemplate);
Mytemplate = replace(Mytemplate, "##start##", "##end##", "this is some new text");
console.log(Mytemplate);