string.replace(searchvalue,newvalue)正則表達式
searchvalue
必須。規定子字符串或要替換的模式的 RegExp 對象。請注意,若是該值是一個字符串,則將它做爲要檢索的直接量文本模式,而不是首先被轉換爲 RegExp 對象。數組
newvalue
必需。一個字符串值。規定了替換文本或生成替換文本的函數。函數
String
一個新的字符串,是用 replacement 替換了 regexp 的第一次匹配或全部匹配以後獲得的。spa
這個參數比較好理解,要麼是字符串要麼是正則表達式。上文說的「請注意,若是該值是一個字符串,則將它做爲要檢索的直接量文本模式,而不是首先被轉換爲 RegExp 對象。」,意思是'/abc/gi'
不會被解析爲正則對象,即便它跟正則寫法同樣。code
本文不說第一個參數,只說第二個參數。regexp
這個參數要麼是普通字符串,要麼是正則替換表達式字符串,說來講去都是字符串,要麼是一個函數。對象
特殊替換字符:blog
字符 替換文本
$& 與正則相匹配的字符串
$` 匹配字符串左邊的字符
$’ 匹配字符串右邊的字符
$1,$2,$,3,…,$n 匹配結果中對應的分組匹配結果索引
$& 適用於沒有子表達式的狀況字符串
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/正則表達式/,'《$&》'); // 獲得:"討論一下《正則表達式》中的replace的用法"
匹配字符串左邊的全部字符
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/正則表達式/,'《$`》'); // 獲得:"討論一下《討論一下》中的replace的用法"
匹配字符串右邊的全部字符,注意,既然 $' 有單引號,那麼外面的引號必須雙引號,若是不能夠雙引號,只能把 $' 的單引號轉義。
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/正則表達式/,"《$'》"); // 獲得:"討論一下《中的replace的用法》中的replace的用法"
依次匹配子表達式
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/(正則)(.+?)(式)/,"《$1》$2<$3>"); // 獲得:"討論一下《正則》表達<式>中的replace的用法"
先看arguments
的用法:
var sStr='討論一下正則表達式中的replace的用法'; sStr.replace(/(正則).+?(式)/,function() { console.log(arguments); }); // ["正則表達式", "正則", "式", 4, "討論一下正則表達式中的replace的用法"]
參數分別爲:
匹配到的字符串(此例爲"正則表達式")
若是正則使用了分組匹配就爲多個不然無此參數。(此例的參數就分別爲 "正則", "式")
匹配字符串的對應索引位置(也就是"正則表達式"的索引位置,此例爲4)
原始字符串
若是加上全局標識符g,則是:
var sStr='討論一下正則表達式中的replace的正則表達式用法'; sStr.replace(/(正則).+?(式)/g,function() { console.log(arguments); }); // ["正則表達式", "正則", "式", 4, "討論一下正則表達式中的replace的正則表達式用法"] // ["正則表達式", "正則", "式", 19, "討論一下正則表達式中的replace的正則表達式用法"]
也就是說,arguments是當前函數的內置屬性,指代當前匹配的參數僞數組。arguments[0]就是當前匹配的字符串。
var sStr='討論一下正則表達式中的replace的正則表達式用法'; sStr.replace(/(正則).+?(式)/g,function() { console.log(arguments[0]); return arguments[0] + 'a'; }); // 正則表達式 // 正則表達式 // "討論一下正則表達式a中的replace的正則表達式a用法"
函數作參數的優點,在於能夠對arguments作更復雜的操做,而不像只是一個字符串參數那麼簡陋。固然,arguments不是必須用,能夠不用。