-1

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?

Bergi
  • 630,263
  • 148
  • 957
  • 1,375
Lex
  • 137
  • 1
  • 10

2 Answers2

2

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);
samanime
  • 25,408
  • 15
  • 90
  • 139
1

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 tt and dd do not vary, I see no point in using a regular expression; you'd simply (statically) set that string to the desired value.

Lonnie Best
  • 9,936
  • 10
  • 57
  • 97