RegExp,JavaScript:在指定的字符处断开字符串,对其进行编码,然后将其插入到相同的位置
我似乎找不到正确的JavaScript正则表达式语法来获取url字符串,获取要编码的其他指定字符之间的字符,然后重新插入。我的例子可能更容易解释: 例如: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”
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
。