Reputation: 4765
I have to do something like this
string = " this is a good example to show"
search = array {this,good,show}
find and replace them with a token like
string = " {1} is a {2} example to {3}" (order is intact)
the string will undergo some processing and then
string = " {1} is a {2} numbers to {3}" (order is intact)
tokens are again replaced back to the string likem so that the string becomes
string = " this is a good number to show"
how to make sure that the pattern is matched and the same tokens are replaced
for example /[gG]ood/ is a pattern to search and replaced later with appropriate "case".Or in other words if ^\s*[0-9]+. is the pattern the matched string needs to be stored and replace to form the original text as it was
How should it be implemented so that the process is done at high performance ?
Thanks in advance.
Upvotes: 6
Views: 18492
Reputation: 10060
You don't mention anything about multiple occurrences of the same token in the string, I guess you'll be replacing all occurrences.
It would go something like this:
var string = "This is a good example to show, this example to show is good";
var tokens = ['this','good','example'];
for (var i = 0; i < tokens.length; i++) {
string.replace(new RegExp(tokens[i], "g"),"{"+i+"}");
}
// string processing here
for (var i = 0; i < tokens.length; i++) {
string.replace(new RegExp("{"+i+"}","g"),tokens[i]);
}
Upvotes: 7
Reputation: 38431
var string = "this is a good example to show"
var search = ["this","good","show"] // this is how you define a literal array
for (var i = 0, len = search.length; i < len; i++) {
string.replace(RegExp(search[i], "g"), "{" + (i+1) + "}")
}
//... do stuff
string.replace(/\{(\d+)\}/, function(match, number) {
if (+number > 0)
return search[+number - 1];
});
Upvotes: 7