我的正则表达式比我的forEach更有效吗?

时间:2017-05-23 04:11:12

标签: javascript node.js regex

我需要从所有字符串中删除空格\t\n。我有2个选项,我想知道哪个更有效,或者为什么我应该选择一个特定的解决方案。 我问,因为我不是正则表达式的忠实粉丝(不是我最强的领域),但是每当我谷歌出现问题时,正则表达式通常都是最佳答案。我更喜欢自己编写解决方案,但如果这不是最好的方法,我会改变我的心态并在正则表达式上做得更好。

解决方案1(REGEX):

function fixString(str) {
  str = str.replace(/(\\t|\\n )/g, "");
  return str;
}

解决方案2(forEach - 我的首选方案):

function fixString(str) {
  let mapEscapeChars = {
    " ": "",
    "\t": "",
    "\n": ""
  }
  let keys = Object.keys(mapEscapeChars);
  keys.forEach(function(element) {
    str = str.replace(element, mapEscapeChars[element]);
  });
  return str;
}

示例字符串:

" \t1234g" -->>> "1234g"

"\ng1234\t " -->>> "g1234"

1 个答案:

答案 0 :(得分:0)

我正在使用正则表达式。虽然难以学习,但它们可能非常强大。根据我的经验,在示例2中编写for循环通常更容易。您可以轻松地创建数组或构建数组:

myarray = "a,b,c"
mystring = "words and stuffs for a and for b"
for i in myarray:
    mystring = re.sub(i, "", mystring)

易于阅读。但是,一旦开始在列表中抛出数百个项目,循环就会效率低下。所以我建议:

mystring = "words and stuffs for a and for b"
mystring = re.sub("[abc]+", "", mystring)

一个长期丑陋的正则表达式变得更快,而不必多次循环。如果要多次运行SAME正则表达式,另一个选择是编译它。它在许多语言中都有所不同。但是说你有一个正则表达式来寻找苹果,你会在很多字符串中搜索它:

regex = re.compile("apples")
for word in (huge_list_of_strings):
    if re.search(regex, word):
        print ("you found it!)

这样一来,正则表达式由引擎创建一次,然后它才会运行。它不必内部构建'每次正则表达式。

所以真的没有错误的方法,只取决于你真正想要的东西:)有时容易阅读值得几秒钟,有时它不是!

在你的情况下,我可能只是做一些事情:

str = str.replace(/[\t\d]/g, "");  --may need to do \\t\\d  not sure with this language