jenney.qiu

导航

js 匹配含变量的正则表达式

今天工作的时候遇到要解析表情,先把最后解决的结果贴上来

/*
*解析内容,将内容中的表情进行替换
*@param: Contens 要处理的字符串
*@param: arrFaceList 表情数据
*@param: webRoot 处理完显示的图片目录级别
*/
function replaceFace(Contens, arrFaceList, webRoot) {

    $.each(arrFaceList.JDataList, function (i, faces) {
        var faceName = eval("/\\[" + faces.ExpressionName + "]/ig");
        var replaceHtml = "<img title='" + faces.ExpressionName + "' style='cursor:pointer' src='" + webRoot + faces.ExpressionUrl + "'>"
        Contens = Contens.replace(faceName, replaceHtml);
    });
    return Contens;
}

我遇到的问题:
1、js里的replace方法跟c#里的不一样,Js里的只替换第一个匹配项,而C#里匹配所有的匹配项。
     解决办法:用正则表达式匹配。正则中有个配置参数g是global全局匹配。ig是ignore case忽略大小写的全局匹配
2、接下来的问题是中括号是正则里的特殊符号,怎么办?
     解决办法:将前中括号[加转义字符\,注意,后中括号]不用加。见下面资料
3、可是正则表达式中有变量该怎么办呢?
     解决办法:用eval()方法来连接字符串。
4、为什么还是不行?
     解决办法:转义字符要写两次,因为在字符串"/\\["里的单斜杠本身也需要转义。


资料:正则表达式中的特殊字符(需要转义)

  • ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
  • $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
  • . 匹配除换行符 \n 之外的任何单字符。要匹配 .,请使用 \。
  • \ 将下一个字符标记为或特殊字符、或原义字符、或后向引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
  • | 指明两项之间的一个选择。要匹配 |,请使用 \|。
  • { 标记限定符表达式的开始。要匹配 {,请使用 \{。
  • [ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
  • () 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
  • * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
  • + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
  • ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
  • PS:我的淘宝店铺新开业,经营各种桌游,棋牌,希望大伙儿能来看看!http://201314yes.taobao.com/

posted on 2012-04-10 18:45  jenney.qiu  阅读(8625)  评论(0编辑  收藏  举报