【问题标题】:Increment a number in a string in with regex使用正则表达式增加字符串中的数字
【发布时间】:2010-12-17 02:24:38
【问题描述】:

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

我的方法是让\d/restofstring,++ 匹配,然后将数字与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); 

【问题讨论】:

  • 呃,你不能像在 IE 中那样更改表单元素名称。你会遇到问题:stackoverflow.com/questions/1650797/…
  • 好的,感谢您的提醒。如果我最终需要为此支持 IE,我将改用 YUI 元素。

标签: javascript html regex


【解决方案1】:

怎么样:

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

我们在字符串末尾搜索一个数字,将其转换为Number,将其加1,然后将其放回字符串中。我认为这与您在问题中的措辞相同。

参考:

【讨论】:

  • 谢谢,我用你的例子提出的解决方案更新了问题
  • 这是一个很好的解决方案。
  • 这是一个稍加修改的版本,适用于字符串中的所有数字:"url5part6".replace(/\d+/g, function(n){ return ++n }); //returns "url6part7"
  • 好答案,但我看不到我们“将其转换为数字”的部分
【解决方案2】:

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

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

【讨论】:

  • 嗯,问题不是关于获取参数的吗?
  • 如果你仔细阅读问题,提问者并没有具体说明他想要改变什么;甚至数字不会在 URL 的 末尾 - 他只是在他的示例中使用它。我认为更改 GET 参数可能是一个用例。
  • "输入元素的名称" = <input name="url1">
【解决方案3】:

看起来不错。您可能想要使用像 ^(.*?)(\d+)$ 这样的正则表达式,确保您抓取的数字位于字符串的末尾。

【讨论】:

    【解决方案4】:

    您可以使用replace 并将其传递给用于替换匹配部分的函数:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-03
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多