【问题标题】:Find numbers at a specific position在特定位置查找数字
【发布时间】:2011-08-24 07:37:05
【问题描述】:

我正在尝试为 JavaScript 找到一个表达式,它可以在特定位置给我两个字符。

它总是同一个调用,所以它可能不会太复杂。

我总是有一个 10 字符长的数字,我想替换前两个,即位置 3 和 4 的两个或位置 5 和 6 的两个等等。

到目前为止,我已经这样做了:

number.replace(/\d{2}/, index));

这将我的前 2 位数字替换为其他 2 位数字。 但现在我想包含一些变量应该替换数字的位置,例如:

number.replace(/\d{atposx,atpox+1}/, index));

意思是:

01234567891

我有时想用 02 替换 01,有时用 56 替换 23。

(或类似的其他数字)。

我希望我指出了我想要的。

【问题讨论】:

    标签: javascript regex numbers replace


    【解决方案1】:

    这个功能很好用:

    function replaceChars(input, startPos, replacement){
       return input.substring(0,startPos) + 
            replacement + 
            input.substring(startPos+replacement.length)  
    }
    

    用法:

    replaceChars("0123456789",2,"55") // output: 0155456789
    

    现场示例:http://jsfiddle.net/FnkpT/

    【讨论】:

      【解决方案2】:

      数字在 JS 中很容易被解释为字符串。因此,如果您使用的是 实际 数字(即 9876543210)而不是由字符串表示的数字(即 '987654321'),只需将数字转换为字符串(''.concat (number); ) 并且不要将自己局限于仅使用数字所能做的事情的限制。

      上面的两个例子都很好(呸,他们打败了我),但你甚至可以这样想:

      var numberString = ''.concat(number);
      var numberChunks = numberString.match(/(\d{2})/g);
      

      您现在已经获得了一系列块,您可以遍历、切换或任何其他类型的流程。完成后,只需说...

      numberString = numberChunks.join('');
      number = parseInt(numberString, 10);
      

      您已将您的号码作为本机号码恢复(或跳过最后一部分以恢复字符串)。而且,除此之外,如果您要进行多次替换..您在数字中进行的替换越多,将其分解成块并处理这些块的效率就越高。我做了一个快速测试,运行 'replaceChars' 函数在单次更改时更快,但如果您对数据进行两次或更多更改,则比仅拆分为数组要慢。

      希望这是有道理的!

      【讨论】:

        【解决方案3】:

        你可以试试这个

        function replaceAtIndex(str,value,index) {
            return str.substr(0,index)+value+str.substr(index+value.length);
        }
        replaceAtIndex('0123456789','X',3);  // returns "012X456789"
        replaceAtIndex('0123456789','XY',3); // returns "012XY56789"
        

        【讨论】:

        • substr 是半非标准的。
        • 到目前为止我所能找到的只是“Netscape 2、Netscape 3、Internet Explorer 3 和 Opera 3 不支持 substr()。”我认为使用它是安全的。区别在于使用 substr(start,length) 与 substring(start,end)
        • 与第一张海报相同的解决方案 - 非常感谢 - 很好的帮助!!
        • @Liviu T.,这就是为什么它是 semi-非标准的。所有浏览器都支持它,但在 ECMAScript 中没有这种方法。
        • 我明白这是一种事实上的标准 :)。但你是对的,一般我们应该使用标准定义的函数
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 2016-01-26
        相关资源
        最近更新 更多