Script Preparation code:
x
 
var TestString = '+'.repeat(200) + '='.repeat(20000) + '+'.repeat(200);
var regexTrim = function(str, ch) {
    if (ch === ']') ch = '\\]';
    else if (ch === '^') ch = '\\^';
    else if (ch === '\\') ch = '\\\\';
    return str.replace(new RegExp('^[' + ch + ']+|[' + ch + ']+$', 'g'), '');
};
function indexTrim(str, ch) {
    var start = 0, 
        end = str.length;
    while(start < end && str[start] === ch)
        ++start;
    while(end > start && str[end - 1] === ch)
        --end;
    return (start > 0 || end < str.length) ? str.substring(start, end) : str;
}
function indexTrimB(str, ch) {
    var start = 0, 
        end = str.length - 1;
    while(start <= end && str[start] === ch)
        ++start;
    while(end >= start && str[end] === ch)
        --end;
    return (start > 0 || end <= str.length) ? str.substring(start, end) : str;
}
function booleanTrim(str, ch) {
    return str.split(ch).filter(Boolean).join(ch);
}
function spreadTrim(str, ch) {
    const first = [...str].findIndex(char => char !== ch);
    const last = [...str].reverse().findIndex(char => char !== ch);
    return str.substring(first, str.length - last);
}
function substringTrim(str, ch) {
    while(str.charAt(0)==ch) {
        str = str.substring(1);
    }
    while(str.charAt(str.length-1)==ch) {
        str = str.substring(0,str.length-1);
    }
    return str;
}
Tests:
  • Index Version (Jason Larke)

     
    indexTrim(TestString, '+');
  • Regex Version (leaf)

     
    regexTrim(TestString, '+')
  • Boolean Filter Version (mbaer3000)

     
    booleanTrim(TestString, '+')
  • Spread Version (Robin F.)

     
    spreadTrim(TestString, '+')
  • Substring Version (Pho3niX83)

     
    substringTrim(TestString, '+')
  • Index Version (Jason Larke) B

     
    indexTrimB(TestString, '+');
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Index Version (Jason Larke)
    Regex Version (leaf)
    Boolean Filter Version (mbaer3000)
    Spread Version (Robin F.)
    Substring Version (Pho3niX83)
    Index Version (Jason Larke) B

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 years ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Chrome 91 on Windows
View result in a separate tab
Test name Executions per second
Index Version (Jason Larke) 587548.1 Ops/sec
Regex Version (leaf) 75710.3 Ops/sec
Boolean Filter Version (mbaer3000) 89191.0 Ops/sec
Spread Version (Robin F.) 3754.4 Ops/sec
Substring Version (Pho3niX83) 233431.5 Ops/sec
Index Version (Jason Larke) B 618211.9 Ops/sec