String.repalce()比對與更換字串

Javascript的String.repalce()方法:

repalce()方法利用給定的字串或是正規表達式來搜尋比對字串,

並且用指定的字串來代替比對成功的字串。

如果要替代字串中所有比對成功的子字串,那就必須在正規表達式中使用g旗標,

否則只會更換第一個比對成功的字串,關於這點,請參考一下範例。

注意一點,replace()方法並不會變更原本字串內容,而是傳回一個新的字串。

String.repalce()的語法:

newstr = str.replace(regexp|substr, newSubStr [,flags]);

newstr = str.replace(regexp|substr, function[,flags]);

regexp:要被替換的子字串,以正規表達式物件來表示,比對成功的字串將被參數2所替代。

substr:要被替換的子字串,比對成功的字串將被參數2所替代。

newSubStr:用替代比對成功的字串。

function:會產生一個新字串的函示,後面會再討論

flags:flags是個非標準的參數,並不建議使用,在參數1中使用正規表達式可以避免使用此旗標。

           (我家的IE好像完全不理這參數.....所以不用的好....)

           flags是由正規表達式的旗標組合而成,有下面幾種:

           g:全局搜尋。

            i:忽略大小寫。

          m:跨行搜尋。

           y:非標準中的非標準,表示從正規表達式物件的lastIndex屬性指定的索引後方開始搜尋。

參數2中(newSubStr)可以使用下面幾種特殊參數,此表格並不支援參數2為函式時使用,:

參數 說明
$$ 插入一個"$".字元
$& 插入比對成功的子字串(被替代的字串)
$` 插入比對成功的子字串前的字串
$' 插入比對成功的子字串後的字串
$n or $nn

n或nn是十進位數字, 只有在參數1使用正規表達式時可以使用,用途為插入第n個比對與()內樣本匹配成功的子字串,建議先看一下正規表達式中關於()的描述。

第二個參數可以使用函式來代替,當比對完成後會呼叫此函式,函式的傳回值會被當成替代完成後的結果,

要注意的是如果使用全局旗標(g),函式可能會被多次呼叫。

參數 說明
match 匹配字串. (跟上面提到的 $& 是一樣的意思.)
p1, p2, ... 跟上面提到的 $n or $nn 是一樣的意思
offset 匹配字串在整個字串的位置,由0開始
string 整個字串

String.repalce()的範例:

<script type="text/javascript">
document.writeln("AAAAAA".replace("A","a")+"<br />");
document.writeln("AAAAAA".replace(/A/g,"a")+"<br />"); //使用g旗標
document.writeln("ABCD".replace(/C/g,"$`c")+"<br />");
document.writeln("ABCD".replace(/C/g,"$'c")+"<br />");
document.writeln("Hi Vic ".replace(/(\w+)\s(\w+)/,"$2 $1")+"<br />");
</script>

String.repalce()的範例輸出:

aAAAAA
aaaaaa
ABABcD
ABDcD
Vic Hi

來看看一個來自於MDN的例子:

function styleHyphenFormat(propertyName)
{
function upperToHyphenLower(match)
{
return '-' + match.toLowerCase();
}
return propertyName.replace(/[A-Z]/g, upperToHyphenLower);
}
==>輸出'border-top'

var newString = propertyName.replace(/[A-Z]/, '-' + '$&'.toLowerCase());  // 這樣寫是不行的。

關於字串物件的其他方法可以參考部落格內的另一篇文章:字串(String)物件
 
 

  按個讚!~支持本站!~

FB推薦載入中