RegExp: Multiple Calls to .replace() vs. Alternation Metacharacter

JavaScript performance comparison

Test case created by Carson Kahn

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    var repStr = "REPLACED!",
        lipsum = "Lorem ipsum @dolor sit_ amet, conse6ctetur adi72piscing elit. Aliq}uam nec purus id quam ultrices rutr**um. Praesent ut nunc ve2l metus dapib?us veh6i2cula. Ut3 co4nseq#uat, ante quis aliquam faci/lisis, diam purus auct$#or7 i1psum, quis ali?quam lacus er%os sed tellus.6 P{roin ^sed dui nec diam fer~ment0um vehicula tempus eu fe3lis7. Nulla a purus quis vel?it fe#ugiat feugiat non 9ac 6nisi. Qui8tur elit. Do2nec pel//lentesque3 ultrices lacus, vit4{ae tristique lig$ula rhoncus et. Vestibu?lum felis felis, bibendum@ vel blandit non, ullamcorper quis ur)(na. Sed mole25tie porta gr8avida. Vestibulum ante ipsum primis in faucibus orci luctus et ultric45es posuere cu5b3lia C74urae; Nunc lacin87ia2suscipit tempu*s. D!ui!s dui &augue, rutrum6 eu tincidunt ve**l, aliq3!uet et mauris. Praesent sed eros massa. Susp34e$ndiss0e dapibus, ^est ac blandit semper, lectu(s nu$nc aliquet% purus, id d@igni3ssi)m lorem nisi eget %odio. Sed erat augue, pulvinar 4nec o9rnare vel, suscipit vel lacus. F6usce di@ctum justo arcu. 3Aenean cursus semper diam 4id imperdiet. Nulla facilisi. Duis at erat faucibus purus convallis gravida iaculis eget dolor. Nunc vitae ultricies urna. Proin tortor lorem, iaculis at lacinia in, ultricies faucibus eros. Morbi molestie velit quis ligula dictum vitae adipiscing est elementum. Duis est sem, pulvinar id vestibulum in, egestas at nunc. Cras egestas condimentum ante, sed dapibus magna venenatis varius. Nulla facilisi. Sed nibh metus, ultrices vel dapibus at, bibendum sed urna. Quisque vel fermentum velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed arcu quam, aliquam non aliquet a, fermentum eu ante. Lorem ipsum @dolor sit_ amet, conse6ctetur adi72piscing elit. Aliq}uam nec purus id quam ultrices rutr**um. Praesent ut nunc ve2l metus dapib?us veh6i2cula. Ut3 co4nseq#uat, ante quis aliquam faci/lisis, diam purus auct$#or7 i1psum, quis ali?quam lacus er%os sed tellus.6 P{roin ^sed dui nec diam fer~ment0um vehicula tempus eu fe3lis7. Nulla a purus quis vel?it fe#ugiat feugiat non 9ac 6nisi. Qui8tur elit. Do2nec pel//lentesque3 ultrices lacus, vit4{ae tristique lig$ula rhoncus et. Vestibu?lum felis felis, bibendum@ vel blandit non, ullamcorper quis ur)(na." + "Sed mole25tie porta gr8avida. Vestibulum ante ipsum primis in faucibus orci luctus et ultric45es posuere cu5b3lia C74urae; Nunc lacin87ia2suscipit tempu*s. D!ui!s dui &augue, rutrum6 eu tincidunt ve**l, aliq3!uet et mauris. Praesent sed eros massa. Susp34e$ndiss0e dapibus, ^est ac blandit semper, lectu(s nu$nc aliquet% purus, id d@igni3ssi)m lorem nisi eget %odio. Sed erat augue, pulvinar 4nec o9rnare vel, suscipit vel lacus. F6usce di@ctum justo arcu. 3Aenean cursus semper diam 4id imperdiet. Nulla facilisi. Duis at erat faucibus purus convallis gravida iaculis eget dolor. Nunc vitae ultricies urna. Proin tortor lorem, iaculis at lacinia in, ultricies faucibus eros. Morbi molestie velit quis ligula dictum vitae adipiscing est elementum. Duis est sem, pulvinar id vestibulum in, egestas at nunc. Cras egestas condimentum ante, sed dapibus magna venenatis varius. Nulla facilisi. Sed nibh metus, ultrices vel dapibus at, bibendum sed urna. Quisque vel fermentum velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed arcu quam, aliquam non aliquet a, fermentum eu ante."
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
Multiple chained .replace() calls
var replacedLipsum = lipsum.replace(/e/ig,             repStr)
                           .replace(/(?:at)|(?:um)/ig, repStr)
                           .replace(/\d/ig,            repStr)
                           .replace(/s\s+/ig,          repStr);

console.log(replacedLipsum);
pending…
Multiple alternation metachars, single .replace() call
var replacedLipsum = lipsum.replace(/(?:e)|(?:(?:at)|(?:um))|(?:\d)|(?:s\s+)/ig, repStr);

console.log(replacedLipsum);
pending…

You can edit these tests or add even more tests to this page by appending /edit to the URL.

Compare results of other browsers

0 comments

Add a comment