js, 正则表达式

sdsd_(1)__wewe__(2)_sdsd__(3)_

aa = [4,5,6]

求一正则表达式,用数组中的项,替换()中的值,括号可能会是中英文的,最终得到
sdsd_(4)__wewe__(5)_sdsd__(6)_

阅读 183
评论
    4 个回答
    • 1.5k

    如果你的原始内容就是你上面的那一段的话还好,感觉你上面的那段也是随机的.可能有括号,肯能也没有,可能有1个,也可能有4个 是这样吗?

    如果是固定的三个括号

    reg = new RegExp("(.*?\\\().*?(\\\).*?\\\().*?(\\\).*?\\\().*?(\\\).*)")
    var str = "sdsd_(1)__wewe__(2)_sdsd__(3)_"
    str.replace(reg,"$1"+"4"+"$2"+"5"+"$3"+"6"+"$4")
    // "sdsd_(4)__wewe__(5)_sdsd__(6)_"

    随机的话

    var reg = new RegExp("(\\\(.*?\\\))","g")
    var aa = [4,5,6]
    var i = 0
    var str = "sdsd_(1)__wewe__(2)_sdsd__(3)_"
    str.replace(reg,function(args){t = "("+aa[i]+")";i++;return t})
    

    其实和另一个答案差不多了.不过随机的话,需要在替换前做一个判断,如果 aa 没有足够的元素,是否还需要继续替换,或者,在 replace 的里面的函数中加一个判断,如果 i的值已经大于等于 aa 的长度之后,直接返回 入参 args 不做替换就好

      • 1.3k
      arr = [4, 5, 6], i = 0;'sdsd_(1)__wewe__(2)_sdsd__(3)_'.replace(/\(.?\)/g, function ($1,$2) {
       
          return `(${arr[i++]})`
      })
        function replaceDatas(str,arr){
            var len=arr.length;
            if(len===0){return str;}
            return str.replace(/([((]\s*)(\d+)(\s*[)))])/g,function(m,g1,g2,g3){
                var index=(+g2);
                if(index>0&&index<=len){
                    return g1+arr[index-1]+g3;
                }
                return m;
            });
        }
          String.prototype.format = function() {
            var matchIndex = 0;
            var args = arguments;
            return this.replace(/([((])([^))]*)([))])/g, function (text, $1, $2, $3) {
              return [$1, args[matchIndex++], $3].join('')
            })
          }
          
          // 英文括号:"sdsd_(4)__wewe__(5)_sdsd__(6)_"
          'sdsd_(1)__wewe__(2)_sdsd__(3)_'.format(4, 5, 6);
          
          // 中文括号:"sdsd_(4)__wewe__(5)_sdsd__(6)_"
          'sdsd_(1)__wewe__(2)_sdsd__(3)_'.format(4, 5, 6);
          
            撰写回答

            登录后参与交流、获取后续更新提醒