在Javascript/jQuery中对变量数组使用多个.replace调用

在Javascript/jQuery中对变量数组使用多个.replace调用,javascript,jquery,Javascript,Jquery,我正在开发一个工具,该工具将接收从word文档复制的文本,并返回一个html输出,以便复制/粘贴到电子邮件客户端进行电子邮件营销 在此过程中,工具需要处理的步骤之一是替换复制值中的特殊字符。输出需要显示编码值,以便在将其复制到电子邮件客户端时,在邮件发送过程中相应地呈现 问题是用户可以填充多个输入,而现在代码非常潮湿。。。我想把这个工具设置得更干净一点,不要经常重复代码 当前,通过提示符()向工具提供输入 我正在接受输入并替换特殊字符™, ®, Ø、''、''和其他(本例中给出的部分列表)根据需

我正在开发一个工具,该工具将接收从word文档复制的文本,并返回一个
html
输出,以便复制/粘贴到电子邮件客户端进行电子邮件营销

在此过程中,工具需要处理的步骤之一是替换复制值中的特殊字符。输出需要显示编码值,以便在将其复制到电子邮件客户端时,在邮件发送过程中相应地呈现

问题是用户可以填充多个输入,而现在代码非常潮湿。。。我想把这个工具设置得更干净一点,不要经常重复代码

当前,通过
提示符()向工具提供输入

我正在接受输入并替换特殊字符™, ®, Ø、''、''和其他(本例中给出的部分列表)根据需要:

JS(评论版)

JS(简体版)

但是。。。我需要在许多提示下运行相同的替换。我不想在代码中重复多次,每个变量都会根据需要更改

我更愿意做的是创建一个函数来处理替换,然后简单地创建一个变量数组并在数组上运行该函数

范例

function txtEncode () {        
    ...replacment code here...
    }


var inputTxt = [msg1, msg2, msg3...];
    for (var i=0; i < inputTxt.length; i++){
        txtEncode(i)
    }
函数txtEncode(){
…在此重新插入代码。。。
}
var inputTxt=[msg1、msg2、msg3…];
对于(变量i=0;i
只需使用替换对创建一个数组:

var replacements = [ ["&", "&amp;"], ["'", "&quot;"] etc
并逐一应用:

replacements.forEach(function(pair) {
     msg = msg.split(pair[0]).join(pair[1]);
});
split/join
更好地替换文字字符串。替换
是用于正则表达式的


而且,您的编码看起来不正确,
&#174;将显示为
®,而不是®

您可以使用全局查找/替换函数并扩展字符串原型,我的一个小提琴中有此代码,但找不到源代码

代码:

String.prototype.replaceArray=函数(查找、替换){
var replaceString=this;
var regex;
for(var i=0;i

演示:

为代码的字符串对象添加一个方法

String.prototype.myCleanString = function(){
    return this.replace(/[\u0027]/g, '&amp;#39;')
                .replace(/[\u2122]/g,'&amp;#153;')
                .replace(/[\u00AE]/g, '&amp;#174;')
                .replace(/[\u201c]/g, '&amp;#34;')
                .replace(/[\u201D]/g, '&amp;#34;')
                .replace(/[\u2018]/g, '&amp;#39;')
                .replace(/[\u2019]/g, '&amp;#39;')
                .replace(/[\u2022]/g, '&amp;#2022;')
                .replace(/foo/g, 'bar'); 
}

需要时打电话

你为什么不能照你的建议去做呢?创建一个方法并将替换逻辑放在其中?。。我想关键是我不确定如何实施我的建议。。。我知道我应该这么做。。。因此,我建议使用“&”和“&;”来避免可能的陷阱,如果在消息中已经存在转义值之后进行计算,则会中断it@Rich:这就是我把它放在第一位的原因。是的,可以理解,只是认为应该提到它,因为使它起作用的假设是不存在逃逸(如输入中预先存在的)#174; 是正确的。。。我需要输出为复制/粘贴到电子邮件客户端的字符串。输出将对第一个&;输入一个符号并留下一个可复制的代码®;。将其粘贴到电子邮件客户端后,编码再次发生,在发送的电子邮件屏幕上留下一个真实的r-ball®副本。我必须查看拆分/加入,因为我不熟悉它。。但这似乎也是可行的。非常感谢。正则表达式总是把我绊倒!如果我只需要替换字符串中的一个特殊字符,这就行了。。我必须在6-7个不同的字符串中搜索20多个字符。
replacements.forEach(function(pair) {
     msg = msg.split(pair[0]).join(pair[1]);
});
String.prototype.replaceArray = function(find, replace) {
  var replaceString = this;
  var regex; 
  for (var i = 0; i < find.length; i++) {
    regex = new RegExp(find[i], "g");
    replaceString = replaceString.replace(regex, replace[i]);
  }
  return replaceString;
};

var msg2 = 'demo \u0027'
var find = ["\u0027"];
var replace = ["&amp;#39;"];
msg2 = msg2.replaceArray(find, replace);
String.prototype.myCleanString = function(){
    return this.replace(/[\u0027]/g, '&amp;#39;')
                .replace(/[\u2122]/g,'&amp;#153;')
                .replace(/[\u00AE]/g, '&amp;#174;')
                .replace(/[\u201c]/g, '&amp;#34;')
                .replace(/[\u201D]/g, '&amp;#34;')
                .replace(/[\u2018]/g, '&amp;#39;')
                .replace(/[\u2019]/g, '&amp;#39;')
                .replace(/[\u2022]/g, '&amp;#2022;')
                .replace(/foo/g, 'bar'); 
}