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

时间:2014-02-24 22:08:49

标签: javascript jquery

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

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

问题是用户可以填充多个输入,现在代码非常 ...我想将工具设置得更清洁,而不是重复代码经常。

目前,输入是通过prompt();

提供给工具的

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

JS(评论版)

msg2 = prompt("enter text here");
  //long version to tag each replacement with it's identifying name
  msg2 = msg2.replace(/[\u0027]/g, '''); // Apostrophe ´
  msg2 = msg2.replace(/[\u2122]/g, '™'); // trademark ™
  msg2 = msg2.replace(/[\u00AE]/g, '®'); // R-Ball ®
  msg2 = msg2.replace(/[\u201c]/g, '"'); // Left Double Quote ‟
  msg2 = msg2.replace(/[\u201D]/g, '"'); // Right Double Quote ”
  msg2 = msg2.replace(/[\u2018]/g, '''); // Left Single Quote ‛
  msg2 = msg2.replace(/[\u2019]/g, '''); // Right Single Quote ’
  msg2 = msg2.replace(/[\u2022]/g, 'ߦ') // Bullet •

JS(短版)

msg2 = prompt("enter text here");

msg2 = msg2.replace(/[\u0027]/g, ''').replace(/[\u2122]/g,
 '™').replace(/[\u00AE]/g, '®').replace(/[\u201c]/g,
 '"').replace(/[\u201D]/g, '"').replace(/[\u2018]/g,
 ''').replace(/[\u2019]/g, ''').replace(/[\u2022]/g,
 'ߦ');

但是......我需要在一些提示上运行同样的替换。我不想在代码中多次重复这一点,每个变量都会根据需要进行更改。

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

实施例

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


var inputTxt = [msg1, msg2, msg3...];
    for (var i=0; i < inputTxt.length; i++){
        txtEncode(i)
    }

3 个答案:

答案 0 :(得分:1)

只需使用替换对制作数组:

var replacements = [ ["&", "&amp;"], ["'", "&quot;"] etc

并逐一应用它们:

replacements.forEach(function(pair) {
     msg = msg.split(pair[0]).join(pair[1]);
});

split/join最好替换文字字符串,而不是用于正则表达式的.replace

此外,您的编码看起来不正确,&amp;#174;将显示为&#174;,而不会显示为

答案 1 :(得分:0)

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

代码:

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);

演示:http://jsfiddle.net/IrvinDominin/YQKwN/

答案 2 :(得分:0)

为您的代码的String对象添加一个方法。

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'); 
}

根据需要致电... http://jsfiddle.net/XKHNt/