2

I have an HTML string containing names:

<div class=\"ExternalClassBE95E28C1751447DB985774141C7FE9C\"><p>Tina Schmelz<br></p><p>Sascha Balke<br></p></div>

And, I would like to remove all html tags and put '&' between names but not at the end of last one like:

Not desired: Tina Schmelz & Sascha Balke &
Desired:     Tina Schmelz & Sascha Balke

I used regex and string replace property.

I could do it by using replace all for <br> tags with ' & ' and then removed all html tags by using this codes:

let mytext = '<div class=\"ExternalClassBE95E28C1751447DB985774141C7FE9C\"><p>Tina Schmelz<br></p><p>Sascha Balke<br></p></div>';
mytext = mytext.replaceAll(/<br>/gi, ' & ');
mytext = mytext.replaceAll(/<.*?>/gi, ''); 

console.log(mytext)

My question: how can I remove last ' & '? Or, does anyone knows better RegEx for it to complete everything in one line? :)

1
  • Do your names always come in p tag? Commented Sep 1, 2021 at 8:01

2 Answers 2

1

You can use

.replace(/<br>(?=(?:\s*<[^>]*>)*$)|(<br>)|<[^>]*>/gi, (x,y) => y ? ' & ' : '')

See the JavaScript demo:

const text = '<div class="ExternalClassBE95E28C1751447DB985774141C7FE9C"><p>Tina Schmelz<br></p><p>Sascha Balke<br></p></div>';
const regex = /<br>(?=(?:\s*<[^>]*>)*$)|(<br>)|<[^>]*>/gi;
console.log(
  text.replace(regex, (x,y) => y ? ' & ' : '')
);

Details:

  • <br>(?=(?:\s*<[^>]*>)*$) - a <br> that is followed with zero or more occurrences of zero or more whitespaces and then a <...> substring till the end of string
  • |- or
  • (<br>) - Group 1: <br> tag
  • | - or
  • <[^>]*> - <, zero or more chars other than < and > and then a >.
Sign up to request clarification or add additional context in comments.

1 Comment

Perfect Wictor! Thank you so much.
1

You could replace all the tags with the code you already written; then use split function to divide the names and the join one to insert the & in the desired points.

const myTextParsed = []

let myText = '<div class=\"ExternalClassBE95E28C1751447DB985774141C7FE9C\"><p>Tina Schmelz<br></p><p>Sascha Balke<br></p></div>';

let myTextArray = myText.split('<br>'); 

myTextArray = myTextArray.map(ta => {
  const temp = ta.replaceAll(/<.*?>/gi, '')
  if (temp.length > 0) { myTextParsed.push(temp) }  
});

myText = myTextParsed.join(' & ');

console.log(myText)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.