用於在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。
1
2
3
4
5
|
stringObject.replace(regexp/substr,replacement);
參數一:必需,規定的字符串或者正則表達式
參數二:必需,一個字符串值。規定了替換文本或生成替換文本的函數。
!!!replacement 中的 $ 字符具有特定的含義。詳情見W3C
|
二、有$1,$2...的例子
1
2
3
4
5
|
//把 "Doe, John" 轉換為 "John Doe" 的形式:
var
str =
"Doe, John"
;
str.replace(/(\w+)\s*, \s*(\w+)/,
"$2 $1"
);
說明:$1,$2上就是按順序對應小括號里面的小正則 捕獲到的內容。
|
三,第二個參數是函數
1
2
3
4
5
6
7
8
9
10
11
12
|
把字符串中所有單詞的首字母都轉換為大寫:
var
str =
'aaa bbb ccc'
;
uw=str.replace(/\b\w+\b/g,
function
(word){
return
word.substring(0,1).toUpperCase()+word.substring(1);}
);
說明:匹配一次就執行一次函數,匹配的內容作為參數
//把數字轉成對應的漢子
var
ary=[
"一"
,
"二"
,
"三"
,
"四"
,
"五"
,
"六"
]
"123456"
.replace(/\d/g,
function
(val){
return
ary[val-1]
})
|
四、一個栗子,實現模板字符替換
1
2
3
4
5
6
|
var
obj = {
name:
'leaf'
,
age:20
}
var
str =
"我是{{name}},name是我的名字,我今年{{age}}歲"
;
//最終替換成"我是leaf,name是我的名字,我今年20歲"
|
實現:
1
2
3
|
function
render(template, context) {
return
template.replace(/\{\{(.*?)\}\}/g, (match, key) => context[key.trim()]);
}
|
說明:
1、.*? 非貪婪匹配模式
2、每個匹配的這則組合執行一次函數
五、其他常用正則替換
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
//去除空格
String.prototype.Trim = function() {
return
this
.replace(/\s+/g,
""
);
}
//去除換行
function ClearBr(key) {
key = key.replace(/<\/?.+?>/g,
""
);
key = key.replace(/[\r\n]/g,
""
);
return
key;
}
//去除左側空格
function LTrim(str) {
return
str.replace(/^\s*/g,
""
);
}
//去右空格
function RTrim(str) {
return
str.replace(/\s*$/g,
""
);
}
//去掉字符串兩端的空格
function trim(str) {
return
str.replace(/(^\s*)|(\s*$)/g,
""
);
}
//去除字符串中間空格
function CTim(str) {
return
str.replace(/\s/g,
''
);
}
//是否為由數字組成的字符串
function is_digitals(str) {
var
reg=/^[0-9]*$/;
//匹配整數
return
reg.test(str);
}
|
//單詞首字母大寫
function uppperCase(str) { return str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase()); }