在node.js服务器中,我需要使用JavaScript转换URL地址,如下所示:
示例1:
hostA/blah/dir1/name/id.js?a=b --> name.hostC/dir2.js?guid=id&a=b
示例2:
hostB/dir1/name/id.js --> name.hostC/dir2.js?guid=id
转换是使用string.replace
使用配置文件中详细说明的正则表达式完成的。
到目前为止,我有:
url.replace(/.*\\/dir1\\/(.*)\\/\\(d{2})\\.js?:(?=\?)(.*)/, "$1.hostC\/dir2.js?guid=$2");
替换字符串指定?guid=id
。如何更改表达式或替换字符串,以便在示例1的情况下添加&originalQueryString
(注意&符号),并且在示例2的情况下不添加任何内容?
答案 0 :(得分:1)
这适用于您的示例:
text.replace(/.*?\/dir1\/([^\/]+)\/(.*?)\.js\??(.*)/i, "$1.hostC/dir2.js?guid=$2&$3").replace(/&$/, "")
您可以更改正则表达式选项以包含' g'或者' m',如果你的实施需要。
答案 1 :(得分:0)
您可以编写类似
的内容/([^/]+)\/([^./]+)\.js(?:\?(.*))?$/
示例强>
> "hostA/blah/dir1/name/id.js".replace(/([^/]+)\/([^./]+)\.js(?:\?(.*))?$/, "$1.hostC/dir2.js?guid=$2&$3")
< "hostA/blah/dir1/name.hostC/dir2.js?guid=id&"
> "hostA/blah/dir1/name/id.js?a=b".replace(/([^/]+)\/([^./]+)\.js(?:\?
(.*))?$/, "$1.hostC/dir2.js?guid=$2&$3")
< "hostA/blah/dir1/name.hostC/dir2.js?guid=id&a=b"
如果尾随&
有问题,可以将正则表达式分解为两个语句,
< "hostA/blah/dir1/name/id.js".replace(/([^/]+)\/([^./]+)\.js$/, "$1.hostC/dir2.js?guid=$2")
> "hostA/blah/dir1/name.hostC/dir2.js?guid=id"
> "hostA/blah/dir1/name/id.js?a=b".replace(/([^/]+)\/([^./]+)\.js(?:\?(.*))$/, "$1.hostC/dir2.js?guid=$2&$3")
< "hostA/blah/dir1/name.hostC/dir2.js?guid=id&a=b"