userjmillohara
userjmillohara

Reputation: 467

Trimming other characters than whitespace? (trim() for variable characters)

Is there an easy way to replace characters at the beginning and end of a string, but not in the middle? I need to trim off dashes. I know trim() exists, but it only trims whitespace.

Here's my use case:

Input:

university-education
-test
football-coach
wine-

Output:

university-education
test
football-coach
wine

Upvotes: 4

Views: 3457

Answers (3)

Emin TAYFUR
Emin TAYFUR

Reputation: 136

The 'trim' function here is inadequate. You can catch this gap using 'RegEx' within the 'replace' function.

   let myText = '-education';
   myText = myText.replace(/^\-+|\-+$/g, ''); // output: "education"

Use in the array

  let myTexts = [
    'university-education',
    '-test',
    'football-coach',
    'wine',
  ];

  myTexts = myTexts.map((text/*, index*/) => text.replace(/^\-+|\-+$/g, ''));
  /* output:
    (4)[
      "university-education",
      "test",
      "football-coach",
      "wine"
    ]
  */
/^\   beginning of the string, dashe, one or more times
|     or
\-+$  dashe, one or more times, end of the string
/g    'g' is for global search. Meaning it'll match all occurrences.

Sample:

const removeDashes = (str) => str.replace(/^\-+|\-+$/g, '');

/* STRING EXAMPLE */
const removedDashesStr = removeDashes('-education');
console.log('removedDashesStr', removedDashesStr);
// ^^ output: "removedDashesStr education"

let myTextsArray = [
  'university-education',
  '-test',
  'football-coach',
  'wine',
];

/* ARRAY EXAMPLE */
myTextsArray = myTextsArray.map((text/*, index*/) => removeDashes(text));
console.log('myTextsArray', myTextsArray);
/*^ outpuut:
    myTextsArray [
      "university-education",
      "test",
      "football-coach",
      "wine"
    ]
*/

Upvotes: 0

Donbob
Donbob

Reputation: 86

I would suggest using the trim function of lodash. It does exactly what you want. It has a second parameter which allows you to pass the characters which should be trimmed. In your case you could use it like this:

trim("-test", "-");

Upvotes: 0

Unmitigated
Unmitigated

Reputation: 89394

You can use String#replace with a regular expression.

^-*|-*$

Explanation:

^ - start of the string
-* matches a dash zero or more times
| - or
-* - matches a dash zero or more times
$ - end of the string

function trimDashes(str){
  return str.replace(/^-*|-*$/g, '');
}
console.log(trimDashes('university-education'));
console.log(trimDashes('-test'));
console.log(trimDashes('football-coach'));
console.log(trimDashes('--wine----'));

Upvotes: 9

Related Questions