RegExp对象与模拟模板字符串的实现
RegExp对象
RegExp 对象即正则表达式对象,用于将文本与一个模式匹配。
创建RegExp对象
// 第二个参数为修饰符
// 'g': 全局搜索,可以有多个结果,每一次开始搜索的位置都是上一次匹配的后一个位置
// 'i': 匹配时不区分大小写
// 'm':多行匹配
// 第二个参数存在时,new RegExp() 不再抛出 TypeError g
var re1 = /\w+/
var re2 = new RegExp('\\w+', 'g')
var re3 = new RegExp(/\w+/, 'g')
RegExp对象的属性
flags:返回一个已有修饰符的字符串
var re = new RegExp(/sad/, 'gi')
console.log(re.flags) // gi
lastIndex:表示匹配的开始位置,可读可写
‘r’ ‘m’ 模式下一直为0, 'g’模式有效
var re = new RegExp(/sad/, 'g')
var s = 'sad'
console.log(re.test(s)) // true
console.log(re.lastIndex) // 3
console.log(re.test(s)) // false
RegExp对象的方法
test():返回一个布尔值,表示能否匹配参数字符串。
exec():匹配成功返回一个数组,否则返回null。
var re = new RegExp(/sad/, 'i')
var s = 'sadd'
console.log(re.exec(s)) // [ 'sad', index: 0, input: 'sadd', groups: undefined ]
模拟模板字符串的实现
let data = {
name: '小王',
class: '软件一班'
}
let str = '${name}是${class}的学生'
function template(str, data) {
Object.keys(data).forEach(key => {
str = str.replace(new RegExp(/\$\{\w+\}/), data[key])
})
return str
}
console.log(template(str, data)) // 小王是软件一班的学生