在做表情字符串替换的时候,发现js的replace函数不好用,在网上找了好久,还是没找到解决方法,没法,只有重新看了app doc,原来一个小的细节遗漏了:
注意: ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数 是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。
于是自己做了一个小的测试,结果真的可以,现粘贴如下,方便以后查找。
var faceList ={ "[大笑]":"_大笑_src", "[傻笑]":"_傻笑_src", "[呵呵]":"_呵呵_src", "[哈哈]":"_哈哈_src" }; $(function() { var regexp = /\[[^\]]+\]/g; var context = '我[大笑] [傻笑] [呵呵]jlj2ff3[哈哈]dddd'; // 测试1 //alert(context.replace(/\[[^\]]+\]/g, replaceFace1)); // 测试2 alert(replaceFace(context)); }) function replaceFace(context) { var regexp = /\[[^\]]+\]/g; return context.replace(regexp, function(reg, num, src) { // @param reg 匹配字符串 // @param num 匹配字符串的开始位置 // @param src 源字符串 return faceList[reg]; }); } function replaceFace1(reg, num, src) { return faceList[reg]; }