Javascript Regex(替换)问题

时间:2011-11-15 11:28:34

标签: javascript regex replace

我正在检查一个集合并替换所有

<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 :(得分:0)

将(重要的)问题放在一边,以确定方法是否合适;如果是我,我通过使用正则表达式的函数参数来避免索引源文本的问题:

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

这将用本地化内容替换标签。