正则表达式描述了一种字符串匹配的模式,用来从某个串中取出符合某个条件的子串
1 .比如从"匹配前面{{name}}匹配后面"中拿到name,并且返回完成的话
2 .核心,将小的表达式结合起来组成更大的表达式
3 .const reg=/{{(\w+)}}/
1 .\w:匹配数字,字母,下划线
2 .\w+:这个最少要出现1次或多次
3 .(\w+):标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
4 .\{:\表示将下一个字符{标记为特殊字符,将会匹配到{,所以\{\{ 会匹配“{{”
4 .所以如果要全部匹配一个长字符串里面的所有{{}}={{}}元素,就要递归操作这个字符串,知道某一个的exec返回的结果是null
image.png
function render(template,data){
const reg=/\{\{(\w+)\}\}/;
if(reg.test(template)){
const name=reg.exec(template)[1]
// 这里应该会有n个吧,但是这里一次只能匹配一个
template=template.replace(reg,data[name])
console.log(template)
return render(template,data)
}
return template
}
let template = '我是{{name}},年龄{{age}},性别{{sex}}';
let person = {
name: '布兰',
age: 12,
sex:'man'
}
render(template, person);
5 .难道没有一个函数,返回匹配到的全部数组么?不用递归的版本
function render(template,data){
const reg=/\{\{(\w+)\}\}/g;
const matchs=template.match(reg)
// 找到所有的匹配
// 匹配子串的正则
const regVal=/\{\{(\w+)\}\}/
for(let k of matchs){
let val=k.match(regVal)[1]
console.log(val)
template=template.replace(regVal,data[val])
console.log(template)
}
return template
}
let template = '我是{{name}},年龄{{age}},性别{{sex}}';
let person = {
name: '布兰',
age: 12,
sex:'man'
}
render(template, person);
exec 捕获,把正则表达式中符合的数据拿出来
1 .返回是一个数组
2 .0 按照正则匹配出来的内容
3 .index:找到的这个字符片段是从哪一个索引开始的
4 .input表示原始字符串
5 .第一个值是匹配到的元素
6 .group:不知道是什么意思
网友评论