现有一字符串"aaa[bbb[ccc,ddd[eee,fff]],ggg[hhh,iii]]"要求,取出所有类似 xxx[xxx,xxx] 结构的字符串

        // 现有一字符串:
        // String str = "aaa[bbb[ccc,ddd[eee,fff]],ggg[hhh,iii]]";
        // 要求,取出所有类似 xxx[xxx,xxx] 结构的字符串 ,
        // 思路:从内到外进行匹配符合条件的字符串,然后
        // 把符合条件的字符串使用指定字符串(例如:000,111,222)代替,
        // 继续对替换后的字符串进行匹配,然后按照上述替换规则替换,

        // 把所有符合条件的替换后的字符串保存在res中,
        // 按照: {000:"需要替换的字符串",111: "",222:"" }
        // 这个格式保存在obj对象中,用于后期的还原

        let res=[];
        let str="aaa[bbb[ccc,ddd[eee,fff]],ggg[hhh,iii]]";
        let count=0;   // 用于生成替换的字符串: 000,111等
        let obj={};    // 保存替换规则对象,用于后期还原

        let pattern=/\w{3}\[\w{3},{1}\w{3}\]/g;  // 用于匹配的正则(由内到外)
        let temp=str.match(pattern);     // 进行匹配字符串,存在返回一个数组,不存在返回null
        while(temp){
            temp.forEach((item,index)=>{
                obj[(""+count).repeat(3)]=item; 
                res.push(item);
                str=str.replace(item,(""+count).repeat(3));
                count++;
            });
            temp=str.match(pattern);   // 进行下一次的匹配,匹配不到返回null;
        }
        let result= res.map((item,index)=>{
            for(let key in obj){
                item=item.replace(key,obj[key]);
            }
            return item;
        })
        console.log(result)


    // 在我定义正则表达式的时候,使用g表示全局搜索,所有在while中使用item作为查找的条件,
    // 如果你使用g 修饰符, 你就可以在while循环中直接使用pattern作为查找条件

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值