JS - 替换多次出现

时间:2018-01-18 06:55:03

标签: javascript replace

我目前正在javascript中编写一个简单的转换器,我必须替换几个字符串。

我知道您可以使用以下方法替换它们:

  1. 正则表达式"string".replace(/s/g, "");
  2. 拆分加入"string".split("s").join("")
  3. 其中哪些变体更好? (持久性,时间等)

    我更喜欢第二个,因为它具有可读性。

3 个答案:

答案 0 :(得分:1)

正则表达式几乎总是更快;在这种情况下尤其如此:您正在从字符串构建数组,根据字符串的大小,这可能会很昂贵。您可以使用几个不同的字符串和几千次运行轻松地测试自己。我明确推荐使用正则表达式。

答案 1 :(得分:1)

“更好”是相对的。你必须定义它。

内存减少分配总是更好。计算方面,硬编码解决方案通常可提供更好的结果。所有操作都需要一些时间,但在JS中,它取决于脚本运行的虚拟机。

如果提供的代码每个用户每天会被调用1000次,那么它确实无关紧要。你无法实现“更好”的表现。

如果你正在“更好”分裂,那么正则表达式就是你的好友。在这种情况下,“更好”意味着“unicode支持”,“非拉丁字符支持”,“更少代码”,当然还有一些难以编码的操作,例如只有在小写字母之后才用大写字母分割。

RegEx是一种语言,在我看来,每个程序员都必须学习。基本语法足以满足大多数操作。

想象一下,为了在一个字符串中连续重复三次或更多次来写一个字母,您需要写多少行。 RegEx是\w\1\1,你就完成了。

答案 2 :(得分:1)

这是一个基准测试(在perl中,但它在javascript中类似):

#!/usr/bin/perl
use Benchmark qw(:all);

my $str = "string";

my $count = -3;
cmpthese($count, {
    'split.join' => sub {
        $str = join'',split's',$str;
    },
    'regex' => sub {
        $str =~ s/s//g;
    },
});

<强>输出:

                 Rate split.join      regex
split.join  5068934/s         --       -76%
regex      20811069/s       311%         --

如您所见,正则表达式比连续2个函数拆分和加入快4倍。