使用JavaScript替换字符串中的多个出现次数

11

我有一个下拉框,其中选项的值是参数,设置如下:

<option value="{$i.tileid}androoftiletypeeq{$i.model}andproducenteq{$i.producent}">{$i.name} {$i.$title}</option>

我想把所有的 "and" 和 "eq" 替换成 "&" 和 "=", 但是我只能让我的 JavaScript 替换第一次出现的。该表单命名为/ ID'ed“rooftile_select”。

$("#rooftile_select").change(function(event) {

  event.preventDefault(); 

  var data = $("#rooftile_select").serialize();                
  var pathname = window.location;
  var finalurl = pathname+'&'+data;

  var replaced = finalurl.replace("and", "&").replace("eq", "=");
});

最终网址中的最后一个参数应该是这样的:

&rid=56&rooftiletype=9andproducenteqs

我有遗漏什么吗?


可能是Javascript多重替换的重复问题。 - James Allardice
这个答案可能提供了一个解决方案:https://dev59.com/K3M_5IYBdhLWcg3w-4rw#1137579 - Joachim VR
4个回答

39
var replaced = finalurl.replace(/and/g, '&').replace(/eq/g, '=');

这应该就可以解决问题了。在 / 后面加上 g,你的意思是要替换所有出现的情况。


这将用"s&"替换"sand",用"=uation"替换"equation"。如果您正在传递这样的单词,请注意这一点。 - dhaupin

1

自从 ES12 以来

截至2020年8月,现代浏览器已经支持 ECMAScript 2021(ES12)语言规范定义的 String.replaceAll()方法。

var replaced = finalurl.replaceAll('and', '&').replaceAll('eq', '=');

否则

我们只能进行完全替换,如果将模式作为正则表达式提供。

var replaced = finalurl.replace(/and/g, '&').replace(/eq/g, '=');

1

Try this :

replaced = finalurl.replace(/and/g, "&").replace(/eq/g, "=");

0

你可以使用带有全局标志的正则表达式

var finalurl = '{$i.tileid}androoftiletypeeq{$i.model}andproducenteq{$i.producent}';
finalurl.replace(/and/g, "&").replace(/eq/g, "=")

如果您的字符串中始终包含{...}变量,则可以使用以下方法来避免意外替换变量或请求参数名称。
finalurl.replace(/\}and/g, "}&").replace(/eq\{/g, "={")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接