Search code examples
javascriptregexregexp-replace

Increment Index and retaining index value to subIndex's in array of strings


Found a way to implement the incrementing value to index using regex.

But for subindex, how to retain the index value?

Note: It helps, If there is a way to increment the subindex value.

Sample Code: Link

    let x = 0;
  let index = new RegExp("pindex", "g");
  let subIndex = new RegExp("psubindex", "g");
  let result = paragraph.replace(index, function(match) {
    return (++x);
  }).replace(subIndex, function (match) {
       return (x);
  }) 

Input:

const sampleParagraphs = 
`   pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit
    pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        psubindex.1. Lorem ipsum dolor sit
        psubindex.2. Lorem ipsum dolor sit
`,
`.  pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit.`,
`   pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        psubindex.1. Lorem ipsum dolor sit
        psubindex.2. Lorem ipsum dolor sit
        psubindex.3. Lorem ipsum dolor sit
`,
`   pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        psubindex.1. Lorem ipsum dolor sit
`

Expected Output:

`   1. Lorem ipsum dolor sit amet, consectetur adipiscing elit
    2. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        2.1. Lorem ipsum dolor sit
        2.2. Lorem ipsum dolor sit
`,
`   3. Lorem ipsum dolor sit amet, consectetur adipiscing elit.`,
`   4. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        4.1. Lorem ipsum dolor sit
        4.2. Lorem ipsum dolor sit
        4.3. Lorem ipsum dolor sit
`,
`   5. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        5.1. Lorem ipsum dolor sit`

Solution

  • The problem with the referenced code is that it replaces all pindex first, then all psubindex, e.g. all psubindex will have the last index value 5.

    You can use a single replace instead of two:

    function replaceIndex(paragraph) {
      let x = 0;
      return paragraph.replace(/(pindex|psubindex)/g, function(match) {
        if(match === 'pindex') {
          ++x;
        }
        return x;
      });
    }
    
    const paragraphSample = `
    pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    
    pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      psubindex.1. Lorem ipsum dolor sit
      psubindex.2. Lorem ipsum dolor sit
    
    pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.
    
    pindex. Lorem ipsum dolor sit amet, consectetur adipiscing.
      psubindex.1. Lorem ipsum dolor sit
      psubindex.2. Lorem ipsum dolor sit
      psubindex.3. Lorem ipsum dolor sit
      psubindex.4. Lorem ipsum dolor sit
    
    pindex. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      psubindex.1. Lorem ipsum dolor sit
    `;
    
    const output = replaceIndex(paragraphSample);
    
    console.log(output);