-1

I need to search a string to check whether it contains specific words which are stored in an array. And if the string contains the words in the array those words must be highlighted. Before going to the highlighting part I tried to replace the string with dummy text if the words in the array found. The code is as follows:

let words:String[]=['cat','rat','bat'];
let text: String = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."
var newText = text.replace(words[0],"TEST");

So the word array inside the replace method should increment from 0 to < words.length. Can anyone suggest a way to do that?

Pegasus008
  • 561
  • 6
  • 17

2 Answers2

0

You should learn about looping.

let words:String[] = ['cat','rat','bat'];
let text: String = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."

let modifiedText = text;

words.forEach(word => {
  modifiedText = modifiedText.replace(word,"TEST");
});
Ace
  • 1,028
  • 2
  • 10
  • 22
0

In your test, did you tried to put word's that matches some on text?

After that pass a RegExp object as 1st argument on "replace" function, and with the flag 'g' to replace all occurrences:

var newText = text;
for (let i in words) {    
    newText = newText.replace(new RegExp(words[i], 'g'),"TEST");
}

If you want to match exact word (ex: the "cat" don't match "category"), the expression should include the previous and next char:

newText = newText.replace(new RegExp('(^|\\s)'+words[i]+'(?=\\s|$)', 'g'),"$1TEST");

The last group contains "?=" to make sure that the next char is the space or end of string, but don't capture it, to be available on next match, and don't have troubles with consecutive words (like "cat cat").

You need also take care about special chars on words, if the words can contains some, you have to escape it (see Is there a RegExp.escape function in JavaScript?)

Manuel Romeiro
  • 1,002
  • 12
  • 14