RegExp,JavaScript:在指定的字符处断开字符串,对其进行编码,然后将其插入到相同的位置

RegExp,JavaScript:在指定的字符处断开字符串,对其进行编码,然后将其插入到相同的位置,javascript,regex,split,Javascript,Regex,Split,我似乎找不到正确的JavaScript正则表达式语法来获取url字符串,获取要编码的其他指定字符之间的字符,然后重新插入。我的例子可能更容易解释: 例如: var url = 'http://www.myurl.com?t=23&dbUrl=http://www.encodeurl.com?t=23&otherUrl=http://www.anotherurl.com' 我需要获取“&dbUrl=”和下一个“http”实例之间的值。将该值“encodeURIComponent”

我似乎找不到正确的JavaScript正则表达式语法来获取url字符串,获取要编码的其他指定字符之间的字符,然后重新插入。我的例子可能更容易解释:

例如:

var url = 'http://www.myurl.com?t=23&dbUrl=http://www.encodeurl.com?t=23&otherUrl=http://www.anotherurl.com'
我需要获取“&dbUrl=”和下一个“http”实例之间的值。将该值“encodeURIComponent”插入其中,然后将其插入var url以获取:


我尝试在http的任何实例上拆分它,只对它的[1]索引进行编码,但我并不总是知道字符串中何时会存在“&dbUrl”。我不想破坏每个查询参数,只想改变一个查询参数和下一个“http”实例的任何实例之间的url。仅因为使用了另一个查询参数,例如:“&otherUrl=”我不知道确切的查询参数,所以除非查找http,否则我不知道它何时停止。我只知道“&dbUrl=”的查询参数。有什么想法吗

一种方法是利用该功能,使用
函数
作为第二个参数来返回转换后的字符串。函数的返回结果将作为原始字符串中的替换值结束

url.replace(/(&dbUrl=)(.+)(?=http)/,
                     /* 
                      m1 = first matched group
                         e.g, "&dbUrl=http://www.encodeurl.com?t=23&otherUrl="
                      m2 = second matched group
                         e.g, "&dbUrl="
                      m3 = third matched group 
                         e.g, "http://www.encodeurl.com?t=23&otherUrl="
                     */
                 function(m1, m2, m3) {
                    return m2 + encodeURIComponent(m3); 
                 })

// returns,
// "http://www.myurl.com?t=23&dbUrl=http%3A%2F%2Fwww.encodeurl.com%3Ft%3D23%26otherUrl%3Dhttp://www.anotherurl.com"

url
变量的可能重复项已损坏。与其试图用笨拙的regexp来修复它,不如回到创建它的地方,并确保在构建URL时该逻辑正确地转义
dbUrl