简单问题:js中动态字符串替换如何写?

myy 2005-01-17 10:02:02
比如:

var p="myparam"; //这是个字符串
var v=30; //这是个数字

var url="http://aaa.bbb.com/a.jsp?myparam=12&xx=33";

现在我想把url变成:

var url="http://aaa.bbb.com/a.jsp?myparam=30&xx=33";

如何写?注意,p,v 是动态的,不能写死。
...全文
334 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
meizz 2005-01-17
  • 打赏
  • 举报
回复
你的替换正则确实不是很准确, 改一下先.
<SCRIPT LANGUAGE="JavaScript">
<!--
String.prototype.setQuery = function(name, value)
{
var reg = new RegExp("(^|&|\\?)("+ name +"=)([^&]*)(&|$)");
var r = this.substr(this.indexOf("?")+1).match(reg);
if (r!=null) return this.replace(reg, "$1$2"+ value +"$4");
else return this + (this.indexOf("?")>-1 ? "&" : "?")+ name +"="+ value
}
//var url = "http://aaa.bbb.com/a.jsp?xx=22";
//var url = "http://aaa.bbb.com/a.jsp?xx=22&yy=99";
var url = "http://aaa.bbb.com/a.jsp?myparam=30&xx=22&yy=99";
//var url = "http://aaa.bbb.com/a.jsp?xx=22&yy=99&myparam=30";
var p="myparam";
var v=22;
alert(url.setQuery(p, v));
//-->
</SCRIPT>

有则替换, 无则添加! :)
myy 2005-01-17
  • 打赏
  • 举报
回复
因为:

我!@#$%^&*,请仔细看看上面我的详细说明。



改进了一下,这是完整的函数:

function doGotoPage(to,pn)
{
var p=parseInt(to);
if(isNaN(p)) return;
var h=window.location.href;
var s=window.location.search;
if(!s)
{
window.location.href=h+"?"+pn+"="+p;
return;
}
if(s=="?")
{
window.location.href=h+pn+"="+p;
return;
}
var reg=new RegExp(pn+"="+"\\d*","g");
if(reg.test(h))
h=h.replace(reg,pn+"="+p); //alert(h);
else
h=h+"&"+pn+"="+p;
window.location.href=h;
}
八哥 2005-01-17
  • 打赏
  • 举报
回复
<script>
var p="myparam"; //这是个字符串
var v=30; //这是个数字

var url="http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";
//alert(url);
</script>
boneeater 2005-01-17
  • 打赏
  • 举报
回复
楼主用正则表达式的方法不错啊,但是为什么不直接写成http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33"呢?
myy 2005-01-17
  • 打赏
  • 举报
回复
算了,自己搞定了:

var p="myparam"; //这是个字符串
var v=22; //这是个数字
var url="http://aaa.bbb.com/a.jsp?myparam=30&xx=33&yy=99"

var reg=new RegExp(p+"="+"\\d*","g");

url=url.replace(reg,p+"="+v);
alert(url);

考虑得可能是不太全面,但能用了,欢迎高手请提建议,谢谢!
也谢谢上面的各位。
myy 2005-01-17
  • 打赏
  • 举报
回复
我倒,看来我的表达能力确实差 :-(

再说详细点吧:

这是原来的url的可能情况:
http://aaa.bbb.com/a.jsp
http://aaa.bbb.com/a.jsp?
http://aaa.bbb.com/a.jsp?xx=33
http://aaa.bbb.com/a.jsp?xx=33&yy=99
http://aaa.bbb.com/a.jsp?myparam=30&xx=33&yy=99
http://aaa.bbb.com/a.jsp?xx=33&yy=99&myparam=30
....
现在给定:
var p="myparam"; //这是个字符串
var v=22; //这是个数字

经过处理后,原来的url应该变成下面的新url:

http://aaa.bbb.com/a.jsp?myparam=22
http://aaa.bbb.com/a.jsp?myparam=22
http://aaa.bbb.com/a.jsp?xx=33&myparam=22
http://aaa.bbb.com/a.jsp?xx=33&yy=99&myparam=22
http://aaa.bbb.com/a.jsp?myparam=22&xx=33&yy=99
http://aaa.bbb.com/a.jsp?xx=33&yy=99&myparam=22

如果给定:
var p="xx"; //这是个字符串
var v=22; //这是个数字

经过处理后,原来的url应该变成下面的新url:

http://aaa.bbb.com/a.jsp?xx=22
http://aaa.bbb.com/a.jsp?xx=22
http://aaa.bbb.com/a.jsp?xx=22
http://aaa.bbb.com/a.jsp?xx=22&yy=99
http://aaa.bbb.com/a.jsp?myparam=30&xx=22&yy=99
http://aaa.bbb.com/a.jsp?xx=22&yy=99&myparam=30

----------------------------------------
这会应该说清楚了吧?
lawyu 2005-01-17
  • 打赏
  • 举报
回复
var a;
a="ttp://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";
不行吗?
这样a应该就是http://aaa.bbb.com/a.jsp?myparam=30&xx=33
peterpansh 2005-01-17
  • 打赏
  • 举报
回复
<script>
var p="myparam"; //这是个字符串
var v=30; //这是个数字

var url="http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";
//alert(url);
</script>
myy 2005-01-17
  • 打赏
  • 举报
回复
eval() 是把字符串当表达式执行,

"http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33"

执行后,返回什么呢?
myy 2005-01-17
  • 打赏
  • 举报
回复
ufrshchenw(tchanway) 的方法没看懂,也可能是我没说清楚吧。

我是想把原来的url中后面的指定的 “参数=值”换成“参数=新值”,如果没有,就加进去。

ufrshchenw 2005-01-17
  • 打赏
  • 举报
回复
eval("http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33")
myy 2005-01-17
  • 打赏
  • 举报
回复
另外,url中可能没有“myparam=30”,则直接加入进去,
url其他的参数都要原封不动,顺序可以打乱。
myy 2005-01-17
  • 打赏
  • 举报
回复
哦,明白了。
meizz 2005-01-17
  • 打赏
  • 举报
回复
this.substr(this.indexOf("?")+1) 我匹配的是从URL里的 ? 号部分开始的.
myy 2005-01-17
  • 打赏
  • 举报
回复
var reg = new RegExp("(^|&|\\?)("+ name +"=)([^&]*)(&|$)");

meizz(梅花雪)前辈的这个表达式允许直接是字符串开头部分,
但实际的url不会前面什么都没有吧?

也许这样更好:

var reg = new RegExp("(&|\\?)("+ name +"=)([^&]*)(&|$)");
liaohaiying 2005-01-17
  • 打赏
  • 举报
回复
meizz(梅花雪),强,晕,看到你的答案才知道我自己想到的有多少的落后(逻辑一样,但方法却要烦N倍)。
顶一下!
领教了!
myy 2005-01-17
  • 打赏
  • 举报
回复
十分谢谢meizz(梅花雪)前辈!



to wen1818(冷月孤心) ,以及类似回答的所有人:

谢谢你们的热心,但请看清楚我的要求先。
wen1818 2005-01-17
  • 打赏
  • 举报
回复
http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33"

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧