美文网首页
匹配大括号里面的字符串

匹配大括号里面的字符串

作者: skoll | 来源:发表于2022-07-09 20:41 被阅读0次

正则表达式描述了一种字符串匹配的模式,用来从某个串中取出符合某个条件的子串

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:不知道是什么意思

test 匹配,看字符串是否符合规则

相关文章

网友评论

      本文标题:匹配大括号里面的字符串

      本文链接:https://www.haomeiwen.com/subject/wuymbrtx.html