js正则替换,如何只替换匹配的到的字符串中的一部分


segmentfault怎么了,为什么我的问题只显示第一行,下面是问题的截图

clipboard.png

以下是匹配到的是一个数组,index为1的那个是要替换掉的内容

阅读 14.4k
3 个回答

应该是记录fid前面的(?或者&)符号下来,replace的时候拼接上

'?cfid=operation&fid=2df&a=flockBBS'.replace(/([&?])fid\=[\s\S]*?(?=&)/i,'$1a=111')

使用i之匹配第一个,如果你要一次改所有的,换成g就行

好吧,直接用正则分3个组好了,不知道有没有更好的方法?

'?fid=2df&c=operation&a=flockBBS'.replace(/(.*[\?\&])(fid\=[^\&\#]*)(.*)/i,'$1fid=324$3')

就你这个需求而言,下面这样就可以满足:

'?fid=2df&c=operation&a=flockBBS'.replace(/fid=.+?(?=&)/, 'fid=324')

下面这个更好些:

'?fid=2df&c=operation&a=flockBBS'.replace(/fid=[^&]+/, 'fid=324')

个人认为,代码还是要根据具体的需求来,如果 url 中确实会出现你评论中所说的cfid,那可以改成下面这样:

'?cfid=operation&fid=2df&a=flockBBS'.replace(/([?&])fid=[^&]+/, '$1fid=324')

上面的代码可以保证 100% 无漏洞吗?不一定!但是他可以满足你的这个需求,这就够了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题