1

Is there any function that can do .trim for specified characters or string?

Something like:

var x = '@@@hello world@@';
console.log(x.trim('@')); // prints 'hello world'

var y = 'hellohellohelloworld';
console.log(y.trim('hello')); // prints ' world'

var z = '@@hello@world@@';
console log(z.trim('@')); // prints 'hello@world'

Even tho I can do without this, it would be way less efficient and not as clean

Siriusmart
  • 187
  • 1
  • 12

2 Answers2

2

You can use a pattern with an alternation | to match either what you want to remove at the start or at the end of the string by repeating it 1 or more time in a non capture group.

The repetition looks like this (?:@)+ for a single @ char, or like this (?:hello)+ for the word hello

If you want to make a function for it and want to pass any string, you have to escape the regex meta characters with a \

var x = '@@@hello world@@';
var y = 'hellohellohelloworld';
var z = '@@hello@world@@';
var a = '*+hello*+'

const customTrim = (strSource, strToRemove) => {
  let escaped = strToRemove.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
  return strSource.replace(new RegExp(`^(?:${escaped})+|(?:${escaped})+$`, 'g'), "")
};

console.log(customTrim(x, "\\s"));
console.log(customTrim(y, "hello"));
console.log(customTrim(z, "@"));
console.log(customTrim(a, "*+"));
The fourth bird
  • 154,723
  • 16
  • 55
  • 70
0
export function trim(str: string, char: string): string {
  const leading = new RegExp(`^[${char}]+`);
  const trailing = new RegExp(`[${char}]+$`);
  return str.replace(leading, "").replace(trailing, "");
}
Shinigami
  • 646
  • 1
  • 7
  • 21
  • You'll need to escape the passed `char` to reliably create RegExp. see: [Regular Expressions: Escaping](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping) – pilchard Aug 16 '21 at 20:48