Search code examples
javascriptecmascript-5

Replace everything between two words including this words


How to change this tt /* a */ pp /* b */ dd to

tt dd

this not including a and b link

var test = "tt /* a */ pp /* b */ dd";
// expected:
var res = "tt dd";

Is it simple with regexp?


Solution

  • If you want to remove something between two things, including those things, regex could do the trick pretty easily:

    const str = 'tt /* a */ pp /* b */ dd';
    const start = '/\\* a \\*/';
    const end = '/\\* b \\*/';
    
    const pattern = new RegExp(`${start}.*${end}`, 'g');
    
    const result = str.replace(pattern, '');
    
    console.log(pattern);
    console.log(result);

    There are two gotchas however.

    The first is from your choice of delimiter. Since it has a * in it, which has special meaning in regex, you need to be sure to escape it. If you choose a delimiter without characters special to regex, you don't have to do that.

    The other gotcha isn't a gotcha so much as it is a requirement issue. You wanted tt dd, but you'll get tt dd as you describe it (two spaces), since both spaces are outside of your delimiters.

    There are a couple of ways to deal with that. One could be to just replace two or more spaces with one space:

    const str = 'tt  dd';
    const result = str.replace(/\s+/g, ' ');
    
    console.log(result);