Javascript 一次替换多个字符串

Javascript 一次替换多个字符串,javascript,jquery,replace,Javascript,Jquery,Replace,在JavaScript中是否有一个简单的等价物 $find=array(“,”\n”); $replace=数组(“,”,“”); $textarea=str_replace($find,$replace,$textarea); 这是使用PHP的str_replace,它允许您使用一个单词数组来查找和替换。我可以使用JavaScript/jQuery做类似的事情吗 。。。 var textarea=$(this.val(); //在这里替换字符串 $(“#输出”).html(文本区域); ..

在JavaScript中是否有一个简单的等价物

$find=array(“,”\n”);
$replace=数组(“,”,“
”); $textarea=str_replace($find,$replace,$textarea);
这是使用PHP的
str_replace
,它允许您使用一个单词数组来查找和替换。我可以使用JavaScript/jQuery做类似的事情吗

。。。
var textarea=$(this.val();
//在这里替换字符串
$(“#输出”).html(文本区域);
...
一种方法是:

var text = $(this).val();
text = text.replace(/</g, "&lt;").replace(/>/g, "&gt;");
$("#output").html(text);
var text=$(this.val();
text=text.replace(//g,“”);
$(“#输出”).html(文本);
text=text.replace(//g',).replace(//\n/g',
);
在一个方法调用中无法做到这一点,您必须将调用链接在一起,或者编写一个手动执行所需操作的函数

var s = "<>\n";
s = s.replace("<", "&lt;");
s = s.replace(">", "&gt;");
s = s.replace("\n", "<br/>");
var s=“\n”;
s=s。替换(“,”);
s=s。替换(“\n”和“
”);
对于标签,您应该能够使用
.text()
而不是
.html()
设置内容

示例:


您可以使用自己的函数来扩展String对象,该函数可以满足您的需要(如果功能缺失,则非常有用):

String.prototype.replaceArray=函数(查找、替换){
var replaceString=this;
for(var i=0;i
对于全局替换,您可以使用正则表达式:

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;
};
String.prototype.replaceArray=函数(查找、替换){
var replaceString=this;
var regex;
for(var i=0;i
要使用该函数,它将类似于您的PHP示例:

var textarea = $(this).val();
var find = ["<", ">", "\n"];
var replace = ["&lt;", "&gt;", "<br/>"];
textarea = textarea.replaceArray(find, replace);
var textarea=$(this.val();
变量find=[“”,“\n”];
变量替换=[“”,“”,“
”]; textarea=textarea.replaceArray(查找、替换);
您可能需要查看名为phpJS的JS库

它允许您使用str_replace函数,就像在PHP中使用它一样。还有很多php函数“移植”到JavaScript


更直观的方法:

String.prototype.htmlProtect = function() {
  var replace_map;

  replace_map = {
    '\n': '<br />',
    '<': '&lt;',
    '>': '&gt;'
  };

  return this.replace(/[<>\n]/g, function(match) { // be sure to add every char in the pattern
    return replace_map[match];
  });
};
String.prototype.htmlProtect=function(){
var替换_映射;
替换映射={
“\n”:“
”, '': '' }; 返回此。replace(/[\n]/g,函数(match){//请确保在模式中添加每个字符 返回替换映射[匹配]; }); };
这就是你所说的:

var myString = "<b>tell me a story, \n<i>bro'</i>";
var myNewString = myString.htmlProtect();

// &lt;b&gt;tell me a story, <br />&lt;i&gt;bro'&lt;/i&gt;
var myString=“给我讲个故事,\nbro';
var myNewString=myString.htmlProtect();
//给我讲个故事,
ibro'/i
String.prototype.replaceArray=函数(查找、替换){
var replaceString=this;
for(var i=0;i-1){
replaceString=replaceString.replace(查找[i],替换[i]);
pos=replaceString.indexOf(find[i]);
}
}
返回替换字符串;
};
var textT=“你好,世界,,,,你好,人们……”;
变量find=[“,”,“];
var replace=['2','5'];
textT=textT.replaceArray(查找、替换);
//结果:Hello world55555 Hello People 2222

您可以使用
字符串的替换方法,在第二个参数中使用函数:

第一种方法(使用查找和替换对象)

编辑

函数
允许
字符串
数组
作为参数:

function str_replace($f, $r, $s){
    return $s.replace(new RegExp("(" + (typeof($f) === "string" ? $f.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&") : $f.map(function(i){return i.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&")}).join("|")) + ")", "g"), typeof($r) === "string" ? $r : typeof($f) === "string" ? $r[0] : function(i){ return $r[$f.indexOf(i)]});
}
常见错误 此页面上的几乎所有答案都使用累积替换,因此在替换字符串本身需要替换的情况下会遇到相同的缺陷。以下是该模式失败的几个示例(h/t@KurokiKaze@derekdreery):

函数替换累积(str、find、replace){
for(var i=0;ilog(replacecomulative(“你和我”、“你”、“我”、“我”、“我”、“你”))最重要的答案相当于:

let text = find.reduce((acc, item, i) => {
  const regex = new RegExp(item, "g");
  return acc.replace(regex, replace[i]);
}, textarea);
鉴于此:

var textarea = $(this).val();
var find = ["<", ">", "\n"];
var replace = ["&lt;", "&gt;", "<br/>"];
var textarea=$(this.val();
变量find=[“”,“\n”];
变量替换=[“”,“”,“
”];

在这种情况下,不进行命令式编程。

使用ES6: 有很多方法可以在
JavaScript
搜索
字符串和
替换
。其中之一如下

const findFor=['',\n'];
常量replaceWith=['','
']; const originalString='你好世界\n让我们来编码'; 让modifiedString=原始字符串; findFor.forEach((tag,i)=>modifiedString=modifiedString.replace(newregexp(tag,“g”),replacetwith[i])) log('原始字符串:',originalString);
log('Modified String:',modifiedString)一个简单的
forEach
循环很好地解决了这个问题:

let text = 'the red apple and the green ball';
const toStrip = ['red', 'green'];
toStrip.forEach(x => {
   text = text.replace(x, '');
});

console.log(text);
// logs -> the apple and the ball

为了澄清,您这样做是为了转义html吗?多个替换而不是单个替换?如果您想高效地执行类似的操作,您需要一个正则表达式。这不是所选答案所做的。看到这一点,我认为这是你正在寻找的Hanks bob,假设这是使用prototype(?)你知道如何使用jQuery吗?@Tim这是常规JavaScript,不需要额外的库。JavaScript是一种原型语言,这意味着每个对象都有一个从中继承的原型。添加到对象的原型只是扩展所有此类对象的一种方式。“tar-pit.replaceArray(['tar',pit'],['capitol',house'])/“cahouseol-house”此解决方案不适用于以下情况:String:“猫打狗”查找数组:['cat',dog']替换数组:['dog',cat']@derekdreery函数既不适用于包含
RegExp
c的字符串
String.prototype.replaceArray = function (find, replace) {
    var replaceString = this;
    for (var i = 0; i < find.length; i++) {
        // global replacement
        var pos = replaceString.indexOf(find[i]);
        while (pos > -1) {
            replaceString = replaceString.replace(find[i], replace[i]);
            pos = replaceString.indexOf(find[i]);
        }
    }
    return replaceString;
};

var textT = "Hello world,,,,, hello people.....";
var find = [".",","];
var replace = ['2', '5'];
textT = textT.replaceArray(find, replace);
// result: Hello world55555 hello people22222
var findreplace = {"<" : "&lt;", ">" : "&gt;", "\n" : "<br/>"};

textarea = textarea.replace(new RegExp("(" + Object.keys(findreplace).map(function(i){return i.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&")}).join("|") + ")", "g"), function(s){ return findreplace[s]});
var find = ["<", ">", "\n"];
var replace = ["&lt;", "&gt;", "<br/>"];

textarea = textarea.replace(new RegExp("(" + find.map(function(i){return i.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&")}).join("|") + ")", "g"), function(s){ return replace[find.indexOf(s)]});
function str_replace($f, $r, $s){
   return $s.replace(new RegExp("(" + $f.map(function(i){return i.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&")}).join("|") + ")", "g"), function(s){ return $r[$f.indexOf(s)]});
}

$textarea = str_replace($find, $replace, $textarea);
function str_replace($f, $r, $s){
    return $s.replace(new RegExp("(" + (typeof($f) === "string" ? $f.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&") : $f.map(function(i){return i.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&")}).join("|")) + ")", "g"), typeof($r) === "string" ? $r : typeof($f) === "string" ? $r[0] : function(i){ return $r[$f.indexOf(i)]});
}
let text = find.reduce((acc, item, i) => {
  const regex = new RegExp(item, "g");
  return acc.replace(regex, replace[i]);
}, textarea);
var textarea = $(this).val();
var find = ["<", ">", "\n"];
var replace = ["&lt;", "&gt;", "<br/>"];
let text = 'the red apple and the green ball';
const toStrip = ['red', 'green'];
toStrip.forEach(x => {
   text = text.replace(x, '');
});

console.log(text);
// logs -> the apple and the ball