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

时间:2015-10-09 13:15:10

标签: 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',然后将其插回到var url中以获取:

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

我尝试在http的任何实例上拆分它,只是编码它的[1]索引但我并不总是知道字符串'& dbUrl'何时存在。我不打算打破每个查询参数,只是改变一个查询参数和下一个'http'实例的任何实例之间的URL。只是因为另一个查询参数,例如:'& otherUrl ='我不知道确切的查询参数,所以我不知道它何时停止,除非找到http。我只会知道'& dbUrl ='的查询参数。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

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

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"