найти и заменить токены в JavaScript - PullRequest
2 голосов
/ 06 мая 2010

Я должен сделать что-то вроде этого

string  = " this is a good example to show"

search  = array {this,good,show}

найдите и замените их токеном типа

string  = " {1} is a {2} example to {3}" (order is intact)

строка подвергнется некоторой обработке, а затем

string  = " {1} is a {2} numbers to {3}" (order is intact)

токены снова заменяются обратно на строку likem, так что строка становится

string  = " this is a good number to show"

как убедиться, что шаблон соответствует и те же жетоны заменены

например / [gG] ood / - это шаблон для поиска, который затем заменяется соответствующим «регистром». Другими словами, если ^ \ s * [0-9] +. является шаблоном, в котором должна быть сохранена и заменена соответствующая строка, чтобы сформировать исходный текст таким, каким он был

Как это следует реализовать, чтобы процесс выполнялся с высокой производительностью?

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 06 мая 2010
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];
});
6 голосов
/ 06 мая 2010

Вы ничего не упоминаете о нескольких вхождениях одного и того же токена в строке, я думаю, вы замените все вхождения.

Это будет примерно так:

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]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...