一次更换多个字符串在JavaScript中有一个简单的等价物吗?$find = array("<", ">", "\n");$replace = array("<", ">", "<br/>");$textarea = str_replace($find, $replace, $textarea); 这是使用PHP str_replace,它允许您使用单词数组来查找和替换。我可以使用JavaScript / jQuery做这样的事情吗?...var textarea = $(this).val();// string replace here$("#output").html(textarea);...
3 回答
狐的传说
TA贡献1804条经验 获得超3个赞
您可以使用自己的函数扩展String对象,该函数可以满足您的需要(如果缺少功能,则非常有用):
String.prototype.replaceArray = function(find, replace) { var replaceString = this; for (var i = 0; i < find.length; i++) { replaceString = replaceString.replace(find[i], replace[i]); } return replaceString;};
对于全局替换,您可以使用正则表达式:
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;};
要使用该函数,它将与您的PHP示例类似:
var textarea = $(this).val();var find = ["<", ">", "\n"];var replace = ["<", ">", "<br/>"];textarea = textarea.replaceArray(find, replace);
jeck猫
TA贡献1909条经验 获得超7个赞
常见的错误
此页面上的几乎所有答案都使用累积替换,因此在替换字符串本身可以替换时会遇到相同的缺陷。以下是这种模式失败的几个例子(h / t @KurokiKaze @derekdreery):
function replaceCumulative(str, find, replace) { for (var i = 0; i < find.length; i++) str = str.replace(new RegExp(find[i],"g"), replace[i]); return str;};// Fails in some cases:console.log( replaceCumulative( "tar pit", ['tar','pit'], ['capitol','house'] ) );console.log( replaceCumulative( "you & me", ['you','me'], ['me','you'] ) );
解
function replaceBulk( str, findArray, replaceArray ){ var i, regex = [], map = {}; for( i=0; i<findArray.length; i++ ){ regex.push( findArray[i].replace(/([-[\]{}()*+?.\\^$|#,])/g,'\\$1') ); map[findArray[i]] = replaceArray[i]; } regex = regex.join('|'); str = str.replace( new RegExp( regex, 'g' ), function(matched){ return map[matched]; }); return str;}// Test:console.log( replaceBulk( "tar pit", ['tar','pit'], ['capitol','house'] ) );console.log( replaceBulk( "you & me", ['you','me'], ['me','you'] ) );
注意:
这是@ elchininet的更加兼容的变化的解决方案,它使用map()
和Array.indexOf()
,因而不会在IE8和更早的版本。
@ elchininet的实现对PHP来说更真实str_replace()
,因为它还允许字符串作为查找/替换参数,并且如果有重复项将使用第一个查找数组匹配(我的版本将使用最后一个)。我在这个实现中没有接受字符串,因为这个案例已经由JS的内置处理了String.replace()
。
慕雪6442864
TA贡献1812条经验 获得超5个赞
text = text.replace(/</g, '<').replace(/>/g, '>').replace(/\n/g, '<br/>');
添加回答
举报
0/150
提交
取消