【问题标题】:Regex - indexof - split and replace how should I apply them correctly?正则表达式 - indexof - 拆分和替换我应该如何正确应用它们?
【发布时间】:2015-01-02 18:06:22
【问题描述】:

我正在尝试替换 addtocart href 中的 qty 值,类似于 :en/products/webshop/cart/{$item->id}/{variant->id}/{$quantity}/name.htm,这发生在前端,忽略大括号,因为它们将使用 smarty 模板引擎返回纯整数。

当用户选择不同的数量值时,我正在更改 addtocart 链接,默认情况下,该值在链接中为“1”。有 activeqty 和 addtocartlink 变量。我需要替换最后一个 /value/name.htm 之间的值

在阅读这里和 w3schools 后尝试了多个示例。还尝试使用:replace('/(.*?)\/(.*?)\/(.*?)\/(.*?)\/(.*?)\/(.*?)\/(.*?)\/(.*?)\/(.*?)/',activeqty);

谢谢大家,希望对建议的解决方案进行简要说明,以便我理解并能够在不同情况下使用它。

【问题讨论】:

  • .* 将匹配斜杠。 [^]* 会更好,因为它匹配除斜杠之外的所有内容
  • 通常情况下,我会按"/" 拆分,但在这种情况下我会小心,因为您似乎可以在其中插入代码。

标签: javascript regex replace split


【解决方案1】:
var regexp = /^([^\/]*\/[^\/]*\/[^\/]*\/[^\/]*\/[^\/]*\/[^\/]*)\/([^\/]*)\/([^\/]*$)/ ;
your_string = your_string.replace( regexp , '\1/1/\3' ); // replace quantity with 1
qty = parseInt( your_string.replace( regexp , '\2' ) ); // get the quantity
// function to increase quantity :
your_string = your_string.replace( regexp, function(match, p1,p2,p3, offset, s)
    {
        return p1 +'/' + (parseInt(p2)+1) + '/' + p3;
    } );

demo demo 2

【讨论】:

  • 我是否正确解释了替换期望模式匹配两个 1?因为variantid是动态的,可能不是1。顺便说一句,感谢regex101的真棒链接,我仍在尝试调整它以满足我的要求,因为我的js中的字符串没有改变,尽管在regex101上它是。
  • 没有。它替换为 \1/1\3 :这意味着: \1 = 第一个括号(和)的内容,然后是字符串“/1”,然后 \3 = 第三个括号的内容
  • 再一次,如果用户已经错误地选择了另一个数量怎么办,它只会在第一次工作。因此我不能使用特定值作为比较,而是必须使用模式,所以我总是在最后两个正斜杠之间更改任何内容,这将使用户能够毫无问题地保持更改数量。
  • 我以为您想将 {$quantity} 替换为“1”。你想用什么来代替它?
  • 忽略大括号,只考虑这个路径:text/text/text/text/text/integer/integer/integer/text.htm,我将从选择菜单中选择的数量存储在 var activeqty .并在使用 qty from select 我更新 var addtocartlink 存储路径时,让 activeqty var 替换最后一个整数或在最后两个正斜杠之间找到的任何内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 2021-12-07
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2014-04-30
相关资源
最近更新 更多