【问题标题】:Replacing characters in a string using replace()使用 replace() 替换字符串中的字符
【发布时间】:2020-03-25 14:08:56
【问题描述】:

我编写这个 js 是为了从 select 语句中提取值来构建一个用户将被发送到的链接。问题是我将它与 Shopify 一起使用,产品存储在

/products/handle 

并且 Shopify 使用 '-' 替换 '.'在链接中。

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

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)

如果变量包含

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

预期的输出是

/products/16-88x25-25x1

但实际输出是

/products/16.88x25.25x1

【问题讨论】:

  • 我已经更新了代码以包含反斜杠,但它仍然不起作用。即使不使用正则表达式,该语句也不起作用,即 ('.' , hyph)

标签: javascript shopify


【解决方案1】:

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

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)

【讨论】:

  • 我已经更新了我的问题以包含正确的正则表达式,但输出仍然没有替换字符。
  • @ZachHolmes 我在答案中添加了一个功能示例,代码应该可以工作。如果您没有看到正确的输出,则可能代码实际上并未运行。您是否尝试过在调试控制台中单步执行?
  • 脚本正在运行,因为我得到的输出不正确。我认为问题出在 Shopify 因为在本地运行脚本确实会产生所需的输出。不过你的答案是正确的。
  • 代码在 Shopify 上正常运行。我认为这可能与他们的内部缓存有关,因为即使从另一台计算机/浏览器/清除缓存访问该网站也无法正常工作,而且它突然开始工作。
【解决方案2】:

你可以试试这个来解决你的问题。 . 表示一个字符。为了捕捉点,你必须做类似\.;

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 2016-04-19
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2022-01-22
    相关资源
    最近更新 更多