如何在JavaScript中更好地组织连续替换方法?

如何在JavaScript中更好地组织连续替换方法?,javascript,replace,mootools,Javascript,Replace,Mootools,我有一系列替换方法,包括正则表达式。它们都是这样组合在一起的: motivation = motivation.replace('death','life').replace('sad','happy').replace(/fu+ck/gi,'yay!').replace('darkness','light'); 有没有一种方法来组织这篇文章,使其更具可读性?不必一直重复“替换”将是一个良好的开端。我还可以访问Mootools库 您可以添加换行符 motivation = motivation

我有一系列替换方法,包括正则表达式。它们都是这样组合在一起的:

motivation = motivation.replace('death','life').replace('sad','happy').replace(/fu+ck/gi,'yay!').replace('darkness','light');

有没有一种方法来组织这篇文章,使其更具可读性?不必一直重复“替换”将是一个良好的开端。我还可以访问Mootools库

您可以添加换行符

motivation = motivation
             .replace('death','life')
             .replace('sad','happy')
             .replace(/fu+ck/gi,'yay!')
             .replace('darkness','light');
除此之外-除非你改变整个方法-不,我不知道如何改进它

改变方法可能意味着这样的事情:

function replaceMany(s /*, [search, replace], ... */) {
  for (var i=1, l=arguments.length; i<l; i++) {
    s = s.replace(arguments[i][0], arguments[i][1]); 
  }
  return s;
}

将其包装到函数中的优点是,您可以在不更改源代码的情况下更改要替换的内容。因此,除非你有一个固定的、有限的、永远不会改变的替换集,否则后一种方法是更好的方法。

你可以添加换行符

motivation = motivation
             .replace('death','life')
             .replace('sad','happy')
             .replace(/fu+ck/gi,'yay!')
             .replace('darkness','light');
除此之外-除非你改变整个方法-不,我不知道如何改进它

改变方法可能意味着这样的事情:

function replaceMany(s /*, [search, replace], ... */) {
  for (var i=1, l=arguments.length; i<l; i++) {
    s = s.replace(arguments[i][0], arguments[i][1]); 
  }
  return s;
}

将其包装到函数中的优点是,您可以在不更改源代码的情况下更改要替换的内容。因此,除非你有一套固定的、有限的、永远不会改变的替换,否则后一种方法是更好的方法。

我能想到的最简单的方法是:巧妙的缩进

motivation = motivation.replace('death','life')
   .replace('sad','happy')
   .replace(/fu+ck/gi,'yay!')
   .replace('darkness','light');
另一种选择是只使用类似于
数组的东西。每个
(我认为这在Mootools中):


这只适用于很长的替换列表。

我能想到的最简单的事情是:巧妙的缩进

motivation = motivation.replace('death','life')
   .replace('sad','happy')
   .replace(/fu+ck/gi,'yay!')
   .replace('darkness','light');
另一种选择是只使用类似于
数组的东西。每个
(我认为这在Mootools中):


这只在很长的替换列表中才有意义。

我不认为原始内容不可读,尤其是如果您按照其他答案的建议添加了一些换行符。所以我会照Tomalak和Tikhon说的做

但是,如果您真的不想一直重复
.replace
,您可以创建一个函数,该函数包含一个find/replace文本数组:

function replaceMany(str, replacements) {
   for (var i=0; i<replacements.length; i+++)
      str = str.replace(replacements[i][0], replacements[i][1]);
   return str;
}

motivation = replaceMany(motivation, [ ['death','life'],
                                       ['sad','happy'],
                                       [/fu+ck/gi,'yay!'],
                                       ['darkness','light'] ]);

我不觉得原文不可读,尤其是如果你按照其他答案的建议加上一些换行符。所以我会照Tomalak和Tikhon说的做

但是,如果您真的不想一直重复
.replace
,您可以创建一个函数,该函数包含一个find/replace文本数组:

function replaceMany(str, replacements) {
   for (var i=0; i<replacements.length; i+++)
      str = str.replace(replacements[i][0], replacements[i][1]);
   return str;
}

motivation = replaceMany(motivation, [ ['death','life'],
                                       ['sad','happy'],
                                       [/fu+ck/gi,'yay!'],
                                       ['darkness','light'] ]);

IMHO已经非常可读了,如果您想进一步提高可读性,可以添加拆分行并将对
replace()
的调用堆叠在另一行下。编写一个采用类似于
{“pattern”:“replacement”}
的散列的助手函数是行不通的,因为调用的顺序很重要。让该函数使用一个数组
{pattern:“death”,replacement:“life”}
对象将导致代码变长变慢。这已经是相当可读的IMHO,如果您想进一步提高可读性,可以添加拆分行并将对
replace()
的调用堆叠在另一行下面。编写一个采用类似于
{“pattern”:“replacement”}
的散列的助手函数是行不通的,因为调用的顺序很重要。让该函数使用一个数组
{pattern:“death”,替换为“life”}
对象将导致代码变长变慢。现代JavaScript有
array.map()
,但我不确定这是否值得依赖。事实上,考虑到现代JavaScript,您也可以将其作为一种简化编写。使用map感觉语义是错误的——map应该返回一个值,而不是执行一系列副作用。一般来说,在这种情况下,我的建议是使用下划线.js,但我怀疑OP是否想引入另一个依赖项。是的,你关于副作用的看法是对的,这在语义上是错误的。@tinkon jelvis.js在这里有什么帮助,它不像mootools那样有数组方法not@screener:给出一个很长的列表,您应该考虑在它自己的变量中定义它,也许每行用一对或两个对它进行缩进以使其更可读。另外,既然你是作为个人爱好来做这件事的,那么你至少应该看看Underline.js——它是一个非常简洁的实用函数库,包括
.each
.map
,以及大量其他函数,这非常有用,可以使您的代码更具可读性和简洁性。现代JavaScript有
Array.map()
,但我不确定这是否是可以依赖的。实际上,考虑到现代JavaScript,您也可以简洁地编写它,作为一种简化。使用map感觉语义是错误的——map应该返回一个值,而不是执行一系列副作用。一般来说,在这种情况下,我的建议是使用下划线.js,但我怀疑OP是否想引入另一个依赖项。是的,你关于副作用的看法是对的,这在语义上是错误的。@tinkon jelvis.js在这里有什么帮助,它不像mootools那样有数组方法not@screener:给出一个很长的列表,您应该考虑在它自己的变量中定义它,也许每行用一对或两个对它进行缩进以使其更可读。另外,既然你是作为个人爱好来做这件事的,那么你至少应该看看Underline.js——它是一个非常简洁的实用函数库,像
.each
.map
,还有很多其他函数,它们都非常有用,可以让你的代码更加可读和简洁。谢谢。出于某种原因,我认为我不能在每个
.replace
之间添加换行符,但您提供的所有函数和示例都更好。我曾试图编写一个像你这样的函数,但我不知道如何处理二维数组。@screener:JavaScript语句以
结尾,不带换行符。请随意格式化您的代码。:)非常感谢。出于某种原因,我认为我不能在每个
.replace
之间添加换行符,但所有函数