十五、正则表达式
正则表达式是一组用于检测字符串是否符合某种规则的表达式。
15.1 定义
- 字面量定义 /正则表达式/修饰符
- /\d+/g
- 构造函数定义 RegExp(正则表达式, 修饰符);
- new RegExp(“abc”, g)
- 第一个参数是正则表达式的表达体
- 第二个参数是正则表达式的修饰符
- g global 表示全局匹配
- i ignore 表示忽略大小写
- m multiple 表示多行匹配
- new RegExp(“abc”, g)
15.2 组成
普通字符 a b c d e f g …. 1 2 3 4 5 …. 赵、钱、孙、李….
转义字符
- \d 所有的数字
- \D 所有的非数字
- \w 所有的数字字母下划线
- \W 所有的非数字字母下划线
- \s 所有的空白符
- \S 所有的非空白符
- 特殊字符(元字符)
- . 除了回车和换行之外的其它所有内容
- () 分组 分组内是一个整体
- [] 范围
- [a-z]
- [A-Z]
- [0-9]
- [0-9A-Za-z]
- {} 数量
- {10} 限定十个 不能多也不能少
- {3,5} 最少三个 最多五个
- {1,} 最少一个 最多无穷个
- ? 零个或一个
- 一个或任意个
- 零个或任意个
- | 或者
- ^ 开头
- $ 结尾
15.3 字符串方法replace
- replace(drop, add);
- drop 被替换下的内容
- 可以是字符串
- 可以是正则表达式
- add 被替换上的内容
- 可以是字符串
- 可以是函数
- 函数的返回值是被替换上的内容
- 函数的参数
- 第一个表示匹配到的内容
- 第二个表示匹配到的内容的索引
- 第三个表示原字符串
- 如果正则表达式中有圆括号,则圆括号捕获的内容会一一对应放在第二个参数位置及后面位置 原来的第二个参数和第三个参数会向后推移
- drop 被替换下的内容
1 有如下字符串:
var str = '<table><tr><td id="u{{id}}">{{id}}</td></tr><td title="{{name}}">{{name}}</td></table>';
结合对象: var user = {id: "1234", name: "tony"};
变为: <table><tr><td id="u1234">1234</td></tr><td title="tony">tony</td></table>
2 有如下字符串
var url = "cid=123&type=image&startTime=2017";
请写一个函数,传入url,返回如下对象
{cid: 123, type: "image", startTime: 2017}
第一题:
var str = '<table><tr><td id="u{{id}}">{{id}}</td></tr><td title="{{name}}">{{name}}</td></table>';
var user = { id: "1234", name: "tony" };
// 正则分组捕获
var str1 = str.replace(/{{(\w+)}}/g, function(match, $1) {
// match 正则匹配到的字符串
// $1 圆括号匹配到的部分
console.log(match, $1)
return user[$1];
})
console.log(str1)
输出: