Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
196 views
in Technique[技术] by (71.8m points)

js, 正则表达式

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

aa = [4,5,6]

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...