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.