使用replace()函数替换字符串中的字符

3
我写了这个JavaScript代码来从选择语句中获取值,以构建链接,用户将被发送到该链接。问题是我正在使用Shopify,其中产品存储在```

```标签下。

/products/handle 

Shopify使用“-”替代链接中的“.”。

我尝试了很多不同的方法来使用replace函数,仅针对字符的单个实例,将新值存储在不同命名的变量中,并尝试在构建链接时执行替换。

myForm.addEventListener('submit', function(e){
    e.preventDefault();
    var val1 = document.getElementById("shortSide").value;
    var val2 = document.getElementById("longSide").value;
    var val3 = document.getElementById("widthSide").value;
    var hyph = '-';
    if(val1 != "default" && val2 != "default" && val2 != "Long Side" && val3 != "default" && val3 != "Width")
      window.location.href = "/products/" + val1.replace(/\./g,hyph) + "x" + val2.replace(/\./g,hyph) + "x" + val3;
    else
        alert("Fill out everything please!");
}, false)

如果变量包含 < /p>
var1 = '16.88'
var2 = '25.25'
var3 = '1'

预期输出应该是:
/products/16-88x25-25x1

但实际输出是

/products/16.88x25.25x1

我已经更新了代码以包含反斜杠,但它仍然无法工作。即使不使用正则表达式(例如('.',hyph)),该语句也无法工作。 - Zach
2个回答

6

. 在正则表达式中是一个特殊字符(它将匹配除行终止符之外的任何字符),您需要使用反斜杠进行转义:


val1.replace(/\./g,hyph) 

例如:

var hyph = '-'
var val1 = '16.88'
var val2 = '25.25'
var val3 = '1'

console.log("/products/" + val1.replace(/\./g,hyph) + "x" + val2.replace(/\./g,hyph) + "x" + val3)


我已经更新了我的问题,包括正确的正则表达式,但输出仍然没有替换字符。 - Zach
@ZachHolmes 我已经在答案中添加了一个可用的例子,代码应该能够运行。如果你没有看到正确的输出,则可能代码实际上没有被执行。你有尝试在调试控制台中逐步执行吗? - DBS
脚本正在运行,因为我得到了输出,只是不正确。我认为问题出在Shopify上,因为在本地运行脚本确实会产生所需的输出。不过你的答案是正确的。 - Zach
代码在Shopify上正常工作。我认为这可能与他们的内部缓存有关,因为即使从另一台电脑/浏览器/清除缓存访问网站也无法工作,突然间它就开始工作了。 - Zach

0
你可以尝试这个来解决你的问题。"." 表示一个字符。如果要匹配点,你需要做类似于 "\." 的操作;

var1 = '16.88'
var2 = '25.25'
var3 = '1';

let href = "/products/" + var1.replace(/\./g, '-') + 'x' + var2.replace(/\./g, '-') + 'x' + var3.replace(/\./g, '-');


console.log(href);


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