如何在包含前导零的JavaScript中增加字符串?

时间:2018-04-02 14:34:53

标签: javascript

我的字符串如下:

MPG_0023

我想找到像

这样的东西

MPG_0023 + 1

我应该

MPG_0024

如何在JavaScript中执行此操作?应该注意的是,如果没有前导零,或者一个前导零应该仍然像MPG23一样工作应该给MPG24或MPG023应该给MPG024。

不应该假设有下划线或前导零,唯一的是第一部分是任何字符串甚至没有字符串,数字部分可能有也可能没有前导零,它是任何类型的数字所以它应该适用于0023(返回0024)或gp031(返回gp032)等。

7 个答案:

答案 0 :(得分:2)

这里有一个不使用正则表达式的快速方法..只要数字前面总是只有一个下划线,只要数字是4位数,这就行了。



import React from 'react';
import ReactDOM from 'react-dom';
import Modal from 'react-modal';

const customStyles = {
  content : {
    top                   : '50%',
    left                  : '50%',
    right                 : 'auto',
    bottom                : 'auto',
    marginRight           : '-50%',
    transform             : 'translate(-50%, -50%)'
  }
};

// Make sure to bind modal to your appElement (http://reactcommunity.org/react-modal/accessibility/)
Modal.setAppElement('#yourAppElement')

class App extends React.Component {
  constructor() {
    super();

    this.state = {
      modalIsOpen: false
    };

    this.openModal = this.openModal.bind(this);
    this.afterOpenModal = this.afterOpenModal.bind(this);
    this.closeModal = this.closeModal.bind(this);
  }

  openModal() {
    this.setState({modalIsOpen: true});
  }

  afterOpenModal() {
    // references are now sync'd and can be accessed.
    this.subtitle.style.color = '#f00';
  }

  closeModal() {
    this.setState({modalIsOpen: false});
  }

  render() {
    return (
      <div>
        <button onClick={this.openModal}>Open Modal</button>
        <Modal
          isOpen={this.state.modalIsOpen}
          onAfterOpen={this.afterOpenModal}
          onRequestClose={this.closeModal}
          style={customStyles}
          contentLabel="Example Modal"
        >

          <h2 ref={subtitle => this.subtitle = subtitle}>Hello</h2>
          <button onClick={this.closeModal}>close</button>
          <div>I am a modal</div>
          <form>
            <input />
            <button>tab navigation</button>
            <button>stays</button>
            <button>inside</button>
            <button>the modal</button>
          </form>
        </Modal>
      </div>
    );
  }
}

ReactDOM.render(<App />, appElement);
&#13;
&#13;
&#13;

或者,如果你想做正则表达式,下划线无关紧要。

&#13;
&#13;
var n = 'MPG_0023';
var a = n.split('_');
var r = a[0]+'_'+(("0000"+(++a[1])).substr(-4));
console.log(r);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您可以使用正则表达式进行更改,如以下代码所示

var text = "MPG_0023";
var getPart = text.replace ( /[^\d.]/g, '' ); // returns 0023
var num = parseInt(getPart); // returns 23
var newVal = num+1; // returns 24
var reg = new RegExp(num); // create dynamic regexp
var newstring = text.replace ( reg, newVal ); // returns MPG_0024

console.log(num);
console.log(newVal);
console.log(reg);
console.log(newstring);

答案 2 :(得分:1)

使用正则表达式和函数padStart

&#13;
&#13;
function add(str, n) {
  return str.replace(/(\d+)/, function(match) {
    var length = match.length;
    var newValue = Number(match) + n;

    return newValue.toString(10).padStart(length, "0");
  });
}

console.log(add("MPG_023", 101));
console.log(add("MPG_0023", 101));
console.log(add("MPG_0000023", 10001));
console.log(add("MPG_0100023", 10001));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以转换为数字,增加值并退回。然后通过查看字符串的长度来检查是否需要前导零。

以下片段:

let str = "MPG_0023",
    num = Number(str.substr(4)) + 1,
    newStr = String(num);

function addLeading0(str) {
  return str.length === 2 ? '00' + str : (str.length === 3 ? '0' + str : str);
}

console.log("MPG_" + addLeading0(newStr));

答案 4 :(得分:0)

使用正则表达式可以这样做。

merges.head = merges.mergeSort(merges.getHead());

答案 5 :(得分:0)

增量填充相同的值(注释内嵌

var prefix = "MPG_"
var padDigit = 4; //number of total characters after prefix
var value = "MPG_0023";

console.log("currentValue ", value);

//method for padding
var fnPad = (str, padDigit) => (Array(padDigit + 1).join("0") + str).slice(-padDigit);

//method to get next value
var fnGetNextCounterValue = (value) => {
   var num = value.substring(prefix.length); //extract num value
   ++num; //increment value
   return prefix + fnPad(num, padDigit); //prepend prefix after padding
};

console.log( "Next",  value = fnGetNextCounterValue(value) );
console.log( "Next",  value = fnGetNextCounterValue(value) );
console.log( "Next",  value = fnGetNextCounterValue(value) );

答案 6 :(得分:0)

一种方法是将字符串拆分为“_”字符,增加数字,然后将零添加回数字。

var testString = "MGP_0023";
var ary = testString.split("_");

var newNumber = Number(ary[1]) + 1;
var result = ary[0] + pad(newNumber);

// helper function to add zeros in front of the number
function pad(number) {
    var str = number.toString();
    while (str.length < 4) {
        str = '0' + str;
    }

    return str;
}