js中字符串有replace方法,通過正則表達式的修飾符可以用一個replace方法結合正則表達式實現各種方式的替換。
不過dart中對各種替換方式做了細分。需要另外注意的是,dart中字符串是不可變的對象,所有replace相關的方法都不會修改原 字符串,而是返回一個新字符串。
1. replaceAll
String replaceAll(pattern from,String replace)
replaceAll第一個參數是匹配符,可以是字符串也可以是正則表達式,第二個參數是要替換的字符串,返回值是一個新字符串。
var a = 'a1b2c3a';
var b = '123';
print(a.replaceAll('a', '123')); //1231b2c3123
print(b.replaceAll(RegExp(r'(\d)'), '111')); //111111111
2.replaceAllMapped
String replaceAllMapped(
Pattern from,
String replace(Match match)
)
replaceAllMapped第一個參數是匹配符,可以是字符串也可以是正則,第二個參數是一個函數,函數的參數捕獲到的字符串片段,其實就是對捕獲的字符串片段的一個映射,看函數名的mapped就能看的出來。
var c = '123';
var d = 'this is an apple';
print(c.replaceAllMapped('2', (Match m) => '${m[0]}-${m[0]}-'));//12-2-3
print(d.replaceAllMapped(RegExp(r'apple'), (Match m) => 'orange'));//this is an orange
3.replaceFirst
String replaceFirst(
Pattern from,
String to,
[int startIndex = 0]
)
replaceFirst第一參數是匹配符,可以是字符串也可以是正則,第二個參數是要替換的字符串,第三個參數可選,默認是0,。這個方法如果匹配到了多個字符串片段,那麼只會替換下標startIndex的那個捕獲片段,如果下標比捕獲的片段長度達,那麼將會報錯
var d = '123';
print(d.replaceFirst(RegExp(r'\d'), 'ccc', 1)); //1ccc3
4.replaceFirstMapped
String replaceFirstMapped(
Pattern from,
String replace(Match match),
[int startIndex = 0]
)
replaceFirstMapped和replaceAllMapped類似,替換捕獲到的字符串片段中startIdnex對應的那個片段,並通過第二個參數傳的函數進行轉換。
var e = 'asd';
print(e.replaceFirstMapped(RegExp(r'\w'), (Match m) => '${m[0]}${m[0]}', 2),);//asdd
5.replaceRange
String replaceRange(
int start,
int end,
String replacement
)
replaceRange第一個參數是開始下標,第二個參數是結束下標,第三個參數是要替換的字符串。替換的字符串包含開始下標,不包含結束下標,並且開始下標的數字要>=0,小於等於結束下標,結束下標的值要小於等於字符串長度,否則會報錯。
var f = '123456789';
print(f.replaceRange(1, 3, 'replace')); //1replace456789