遍历正则表达式的结果并分别替换

10 浏览
0 Comments

遍历正则表达式的结果并分别替换

简短:我正在寻找类似于jQuery的.each()函数的正则表达式版本。

我有一段长文本,其中包含一些格式为https://stackoverflow.com/a/3426956/237312的短字符串。

function nickFormat(text) {
            var exp = /\<\;(.*)\>\;/ig;
            name = exp.exec(text);
            return text.replace(exp, "<$1>");
        }

这是我目前用来替换找到的字符串的代码,这意味着正则表达式是有效的。但它并不像最初的意图那样工作。每个找到的字符串都以相同的颜色着色。

有什么想法,如何解决这个问题?

0
0 Comments

问题的出现原因是在函数`nickFormat`中,使用正则表达式`/\&lt\;(.*)\&gt\;/ig`来匹配字符串中的特定模式,并将匹配的结果替换为特定的格式。但是在替换的过程中,发现只有第一个匹配到的结果被替换了,而后面的结果没有被替换。

解决方法是需要对匹配到的结果进行迭代,并分别进行替换。下面是修改后的代码:

function nickFormat(text) {
    var exp = /\&lt\;(.*)\&gt\;/ig;
    function makeItSo(match) {
        return "<span style='color: #"+intToARGB(hashCode(match)).substr(0, 6)+"'>"+match+"</span>";
    }
    // 迭代匹配结果,并分别替换
    var matches = text.match(exp);
    if (matches) {
        for (var i = 0; i < matches.length; i++) {
            text = text.replace(matches[i], makeItSo(matches[i]));
        }
    }
    return text;
}

通过对匹配结果进行迭代,将每个匹配到的结果分别传入`makeItSo`函数进行替换,最后返回替换后的字符串。这样就解决了只替换第一个匹配结果的问题。

0