js, 正则表达式

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

aa = [4,5,6]

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

阅读 2.7k
4 个回答

如果你的原始内容就是你上面的那一段的话还好,感觉你上面的那段也是随机的.可能有括号,肯能也没有,可能有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 不做替换就好

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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题