为了账号安全,请及时绑定邮箱和手机立即绑定

一次更换多个字符串

一次更换多个字符串

慕斯709654 2019-07-30 16:53:21
一次更换多个字符串在JavaScript中有一个简单的等价物吗?$find = array("<", ">", "\n");$replace = array("&lt;", "&gt;", "<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 = ["&lt;", "&gt;", "<br/>"];textarea = textarea.replaceArray(find, replace);


查看完整回答
反对 回复 2019-07-30
?
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()


查看完整回答
反对 回复 2019-07-30
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

text = text.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n/g, '<br/>');


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 592 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信