我正在开发一种工具,可以接收从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)
}
答案 0 :(得分:1)
只需使用替换对制作数组:
var replacements = [ ["&", "&"], ["'", """] etc
并逐一应用它们:
replacements.forEach(function(pair) {
msg = msg.split(pair[0]).join(pair[1]);
});
split/join
最好替换文字字符串,而不是用于正则表达式的.replace
。
此外,您的编码看起来不正确,&#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 = ["&#39;"];
msg2 = msg2.replaceArray(find, replace);
答案 2 :(得分:0)
为您的代码的String对象添加一个方法。
String.prototype.myCleanString = function(){
return this.replace(/[\u0027]/g, '&#39;')
.replace(/[\u2122]/g,'&#153;')
.replace(/[\u00AE]/g, '&#174;')
.replace(/[\u201c]/g, '&#34;')
.replace(/[\u201D]/g, '&#34;')
.replace(/[\u2018]/g, '&#39;')
.replace(/[\u2019]/g, '&#39;')
.replace(/[\u2022]/g, '&#2022;')
.replace(/foo/g, 'bar');
}
根据需要致电... http://jsfiddle.net/XKHNt/