代码之家  ›  专栏  ›  技术社区  ›  Jacob Rask

用regex在字符串中增加一个数字

  •  9
  • Jacob Rask  · 技术社区  · 15 年前

    我得到一个输入元素的名称,它是一个带数字的字符串( url1 )我想把数字增加1( url2 )以最简单和最快的方式。

    我的方法是 \d /REST字符串, ++ 匹配,然后用restofstring组合数字。有更好的方法吗?

    更新:

    我的最终(虚拟)代码变成:

    var liNew = document.createElement('li'); 
    liNew.innerHTML = liOld.innerHTML; 
    var els = Y.Dom.getChildrenBy(liNew, function(el) { 
        return el.name.match(/\d+$/); 
    } // YUI method where the function is a test 
    for (var i = 0, el; el = els[i]; i++) { 
        el.name = el.name.replace(/\d+$/, function(n) { return ++n }); 
    } 
    list.appendChild(liNew); 
    
    4 回复  |  直到 15 年前
        1
  •  33
  •   Roatin Marth    15 年前

    怎么样:

    'url1'.replace(/\d+$/, function(n){ return ++n }); // "url2"
    'url54'.replace(/\d+$/, function(n){ return ++n }); // "url55"
    

    在这里,我们在字符串的末尾搜索一个数字,将其强制转换为 Number ,将其递增1,然后将其放回字符串中。我想这和你在问题中说的一样。

    参考文献:

        2
  •  7
  •   intgr    15 年前

    简单。对正则表达式使用替换函数:

    s = 'abc99abc';
    s = s.replace(/\d+/, function(val) { return parseInt(val)+1; });
    

    将设置变量 S 到: abc100abc

    但是,如果要确保只更改URL中的某个参数,则会变得更复杂:

    s = '?foo=10&bar=99';
    s = s.replace(/[&?]bar=\d+/, function(attr) {
      return attr.replace(/\d+/, function(val) { return parseInt(val)+1; });
    });
    

    将设置变量 S 到: ?foo=10&bar=100

        3
  •  1
  •   Tim Pietzcker    15 年前

    看起来不错。你可能想使用类似regex的 ^(.*?)(\d+)$ ,确保要获取的数字在字符串的末尾。

        4
  •  1
  •   Phil Ross Matt Johnson-Pint    15 年前

    你可以使用 replace 并传递一个用于替换匹配部分的函数:

    str.replace(/\d+/, function(number) { return parseInt(number, 10) + 1; });