Home > Enterprise >  Replace everything between two words including this words
Replace everything between two words including this words

Time:03-28

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"; //var res = "tt dd";

Is it simple with regexp?

CodePudding user response:

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);

CodePudding user response:

If tt and dd vary, here's a regular expression that removes what's between those variances:

const re = /\s .*\/\s /gm;

let str = `tt /* a */ pp /* b */ dd`;
str = str.replace(re,' ');
console.log(str);  //tt dd

// Change tt and dd to aa and bb, instead, for example:
str = `aa /* a */ pp /* b */ bb`;
str = str.replace(re,' ');
console.log(str); // aa bb

If those locations don't vary, I see no point in using a regular expression; you'd simply set that string to the desired value, instead.

  • Related