我目前正在javascript中编写一个简单的转换器,我必须替换几个字符串。
我知道您可以使用以下方法替换它们:
"string".replace(/s/g, "");
"string".split("s").join("")
其中哪些变体更好? (持久性,时间等)
我更喜欢第二个,因为它具有可读性。
答案 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倍。