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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM