Javascript Regex (заменить) выпуск - PullRequest
1 голос
/ 15 ноября 2011

Я проверяю коллекцию и заменяю все теги

<Localisation container="test">To translate</Localisation>

текстом.

Следующие коды выполняют то, что я хочу:

var localisationRegex = new RegExp("(?:<|&lt;)(?:LocalisationKey|locale).+?(?:container|cont)=[\\\\]?(?:['\"]|(&quot;))(.+?)[\\\\]?(?:['\"]|(&quot;)).*?(?:>|&gt;)(.*?)(?:<|&lt;)/(?:LocalisationKey|locale)(?:>|&gt;)", "ig");

            match = localisationRegex.exec(parsedData);

            while (match != null) {
                var localeLength = match[0].length;

                var value = match[4];

                parsedData = parsedData.substr(0, match.index) + this.GetLocaleValue(value) + parsedData.substr(match.index + localeLength);

                match = localisationRegex.exec(parsedData);
            }

Но когдастрока, которую я заменяю, длиннее исходной строки, индекс / место, где она начнет искать следующее совпадение, неверен (слишком далеко).Это иногда приводит к тому, что теги не найдены.

1 Ответ

0 голосов
/ 15 ноября 2011

Отбросив (важный) вопрос о том, является ли подход хорошим, если бы это был я, я бы избежал проблемы индексации исходного текста, используя аргумент функции для регулярного выражения:

var localizer = this;
var result = parsedData.replace(localisationRegex, function(_, value) {
  return localizer.GetLocaleValue(value);
});

Это заменит теги локализованным контентом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...