JavaScript replace 方法


一到面試題引起的好奇:

  12000000.11 如何將浮點數小數點左邊的數每三位加一個逗號,如12,000,000.11?

  

function commafy(num){
  return num && num.toString().replace(/(\d)(?=(\d{3})+\.)/g, function($1, $2){
    return $2 + ',';
  });
}

  關於replace方法:

  注:看正則表達式的匹配模式:全局匹配(//g)和非全局匹配(只替換首個匹配的字符串)

  第一種情況:第二個參數為字符串

  對於正則replace約定了一個特殊標記符$

   1. $i( i: 1-99 ):表示從左到右正則表達式所匹配的文本,

    e.g.1  "Baude & Lee".replace(/(\w+)\s*&\s*(\w+)/g, "$2 ^ $1"); // output: Lee ^ Baude

    在"$2 ^ $1"中,使用該模式替換正則表達所匹配的全字符串。

    e.g.2 "Baude & Lee   test".replace(/(\w+)\s*&\s*(\w+)/g, "$2 ^ $1"); // output: Lee ^ Baude  test

    在上面例子e.g.2中,output輸出的結果是正則表達式所能匹配的部分被"$2 ^ $1"表達式替換成功后的字符串,再加上原字符串"  test".

  2. $& : 有人說“表示與正則表達式匹配的全文本”,還有其他說法,但是我自己運行代碼發現,它與stringObject是相等的

    e.g.3, "Baude & Lee  test".replace(/(\w+)\s*&\s*(\w+)/g, "$2 ^ $1"); // $& 輸出的是"Baude & Lee  test"(具體情況如何請自行測試)

  3. $` : 請自行測試,不要輕易相信他人的說法有可能,你會得出意想不到的結果

  4. $' : 請自行測試,不要輕易相信他人的說法有可能,你會得出意想不到的結果

  第二個參數為函數:

  注:當replace方法執行的時候每次都會調用該函數,返回值作為替換的數值

  

1 function capitialize(str){
2   return str.replace(/(^|\s)([a-z])/g, function($1, $2, $3){
3     return $2+$3.toUpperCase();
4   });
5 }
6 console.log(capitialize("i am a boy, not a girl!"));// I Am A Boy, Not A Girl

 

 

 

  以下對於函數參數(replace(regexp, function($1,$2,$3){}))的解釋,來自摘抄(最好自行檢測,不要輕易相信他人):

  1. 第一個參數為每次匹配的全文本( $& )。(個人覺得這個說法還是比較通俗易懂,不像某些文檔,不知所雲)

  2. 中間參數為子表達式匹配字符串,個數不限($i(i: 1-99))。

    有些同學可能對於$1,$2,$3, ...不是很理解。我來表述一下自己的理解(注意不一定正確):在正則表達式中,比如(/(^|\s)([a-z])/g)中$2==(^|\s), $3==([a-z]),大概是這個樣子進行匹配的。

    上述例子中,每成功匹配一次(比如第一次成功匹配 i,都會通過Function的return值替換掉匹配成功的字符或字符串)。

   3. 倒數第二個參數表示匹配文本字符串的成功的位置的下標(可以自行打印輸出查看結果)

  4. 最后一個參數表示字符串本身。

 相關鏈接:

  1. https://msdn.microsoft.com/zh-cn/library/9dthzd08%28v=vs.94%29.aspx?f=255&MSPPError=-2147217396

  2. https://msdn.microsoft.com/zh-cn/library/t0kbytzc(v=vs.94).aspx

  3. https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

  4. http://www.w3school.com.cn/jsref/jsref_replace.asp

  5. http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

    如有錯誤,歡迎指正和討論☺!


免責聲明!

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



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