Если Вы имеете Прототип установленный, можно ограничить код, чтобы генерировать и отправить скрытую форму как это:
var form = new Element('form',
{method: 'post', action: 'http://example.com/'});
form.insert(new Element('input',
{name: 'q', value: 'a', type: 'hidden'}));
$(document.body).insert(form);
form.submit();
Если данные токенизированы (например, «Уважаемый $ name $, по состоянию на $ date $ ваш баланс составляет $ amount $»), то Regex
может быть полезным:
static readonly Regex re = new Regex(@"\$(\w+)\$", RegexOptions.Compiled);
static void Main() {
string input = @"Dear $name$, as of $date$ your balance is $amount$";
var args = new Dictionary<string, string>(
StringComparer.OrdinalIgnoreCase) {
{"name", "Mr Smith"},
{"date", "05 Aug 2009"},
{"amount", "GBP200"}
};
string output = re.Replace(input, match => args[match.Groups[1].Value]);
}
Тем не менее, без чего-то подобного, я ожидаю, что ваш цикл Replace
, вероятно, будет примерно таким, как вы, без чрезмерной длины. Если он не токенизирован, возможно, профилируйте его; действительно ли проблема Заменить
?
Мне кажется разумным, за исключением одного: он чувствителен к порядку. Например, возьмите входную строку «$ x $ y» и словарь замены:
"$x" => "$y"
"$y" => "foo"
Результатом замены будет либо «foo foo», либо «$ y foo» в зависимости от того, какая замена сначала выполняется.
Вы можете управлять порядком, используя вместо этого List
. Альтернатива - пройтись по строке, убедившись, что вы не потребляете замены в дальнейших операциях замены. Хотя это, вероятно, будет намного сложнее.