Javascript 一次替换多个字符串
在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(文本区域); ..
$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, "<").replace(/>/g, ">");
$("#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("<", "<");
s = s.replace(">", ">");
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 = ["<", ">", "<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 />',
'<': '<',
'>': '>'
};
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();
// <b>tell me a story, <br /><i>bro'</i>
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;i log(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 = ["<", ">", "<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 = {"<" : "<", ">" : ">", "\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 = ["<", ">", "<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 = ["<", ">", "<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