遍历正则表达式的结果并分别替换
遍历正则表达式的结果并分别替换
简短:我正在寻找类似于jQuery的.each()
函数的正则表达式版本。
我有一段长文本,其中包含一些格式为https://stackoverflow.com/a/3426956/237312
的短字符串。
function nickFormat(text) {
var exp = /\<\;(.*)\>\;/ig;
name = exp.exec(text);
return text.replace(exp, "<$1>");
}
这是我目前用来替换找到的字符串的代码,这意味着正则表达式是有效的。但它并不像最初的意图那样工作。每个找到的字符串都以相同的颜色着色。
有什么想法,如何解决这个问题?
问题的出现原因是在函数`nickFormat`中,使用正则表达式`/\<\;(.*)\>\;/ig`来匹配字符串中的特定模式,并将匹配的结果替换为特定的格式。但是在替换的过程中,发现只有第一个匹配到的结果被替换了,而后面的结果没有被替换。
解决方法是需要对匹配到的结果进行迭代,并分别进行替换。下面是修改后的代码:
function nickFormat(text) { var exp = /\<\;(.*)\>\;/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`函数进行替换,最后返回替换后的字符串。这样就解决了只替换第一个匹配结果的问题。