知识点:
1. 正向预查
2. 贪婪与非贪婪模式
- 贪婪模式
- 原则:能匹配多个,绝不匹配少个;
- 贪婪模式的量词:“{m,n}、“{m,}”、“?”、“*”和“+”
- 非贪婪模式
- 原则:能匹配少个,绝不匹配多个;
- 非贪婪模式的量词(匹配优先量词后加上“?”):“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”
3. replace方法
- replace本身没有全局匹配的能力;
一、正向预查
1. 正向预查(?=n)
var str = '1231231231',
reg = /1(?=2)/g
console.log(str.match(reg))
2. 正向负预查:(?!)
var str = '1231231231',
reg = /1(?!2)/g;
console.log(str.match(reg));
二、贪婪与非贪婪模式
- 贪婪模式
- 原则:能匹配多个,绝不匹配少个;
- 贪婪模式的量词:“{m,n}、“{m,}”、“?”、“*”和“+”
- 非贪婪模式
- 原则:能匹配少个,绝不匹配多个;
- 非贪婪模式的量词(匹配优先量词后加上“?”):“{m,n}?”、“{m,}?”、“??”、“*?”和“+?”
var str = 'abcd{{efg}}abcd{{xyz}}',
reg = /{{.*?}}/g;
console.log(str.match(reg));
var str = 'bbbbbb',
reg = /\w??/g;
console.log(str.match(reg));
三、replace方法
1. replace本身没有全局匹配的能力
var str = 'JSplusplus';
var str1 = str.replace('plus', '+');
console.log(str1);
2. xxyy -> yyxx
var str = 'aabbccdd',
reg = /(\w)\1(\w)\2/g;
console.log(str.match(reg));
var str1 = str.replace(reg, '$2$2$1$1');
console.log(str1);
var str = 'aabbccdd',
reg = /(\w)\1(\w)\2/g;
var str2 = str.replace(reg, function ($, $1, $2) {
console.log($, $1, $2);
return $2 + $2 + $1 + $1;
});
console.log(str2);
3. 将js-plus-plus变成jsPlusPlus
var str = 'js-plus-plus',
reg = /-(\w)/g;
var str2 = str.replace(reg, function ($, $1) {
console.log($, $1);
return $1.toUpperCase();
});
console.log(str2);
4. 将jsPlusPlus变成js_plus_plus
var str = 'jsPlusPlus',
reg = /([A-Z])/g;
var str2 = str.replace(reg, function ($, $1) {
return '_' + $1.toLowerCase();
})
console.log(str2);
5. xxyyzz -> XxYyZz
var str = 'xxyyzz',
reg = /(\w)\1(\w)\2(\w)\3/g;
var str2 = str.replace(reg, function ($, $1, $2, $3) {
return $1.toUpperCase() + $1 + $2.toUpperCase() + $2 + $3.toUpperCase() + $3;
})
console.log(str2);
6. 将aabbcc变成ab$c,不能使用function(){}
var str = 'aabbcc',
reg = /(\w)\1(\w)\2(\w)\3/g;
var str2 = str.replace(reg, '$1$$$2$$$3$$');
console.log(str2);
7. \:转义字符
var str = 'aa?bb+cc',
reg = /\?|\+/g;
var str2 = str.replace(reg, '');
console.log(str2);
8. *
var str = 'aaaaabbccccccc',
reg = /(\w)\1*/g;
var str2 = str.replace(reg, '$1');
console.log(str2);
9. 数值每三位加逗号
var str = '10000000000000',
reg = /(?=(\B)(\d{3})+$)/g;
var str2 = str.replace(reg, ',');
console.log(str2);
10. 将字符串变成四位大写字母-的方式连接起来
var str = 'fdlhgsduiklkljajhjkqwdd',
reg = /(?=(\B)(\w{4})+$)/g;
var str2 = str.replace(reg, '-').toUpperCase();
console.log(str2);
11. 双大括号替换值{{}}
var str = 'My name is {{name}}.I\'m {{age}} years old.',
reg = /{{(.*?)}}/g;
var str2 = str.replace(reg, function (node, key) {
return {
name: 'may',
age: '18岁'
} [key];
})
console.log(str2);