wcatesjr
wcatesjr

Reputation: 11

Replace all occurrences except for the 3rd

I am scanning a QR code and need a script to replace the commas with a ( \t)

My results are:

820-20171-002, ,Nov 24, 2020,,,13,283.40,,Mike Shmow

My problem is - I don't want a comma after the date. Right now I have the following - which does work to replace commas with a tab.

decodeResults[0].content.replace(/,/g, "\t");

I am trying to replace the /,/g with an expression to replace all commas except for the 3rd occurrence.

Upvotes: 1

Views: 25

Answers (1)

Ryszard Czech
Ryszard Czech

Reputation: 18621

Use

.replace(/(?<!\b[a-zA-Z]{3}\s+\d{1,2}(?=,\s*\d{4})),/g, '\t')

See proof

Explanation

--------------------------------------------------------------------------------
  (?<!                      Negative lookbehind start, fail if pattern matches
--------------------------------------------------------------------------------
    \b                       the boundary between a word char (\w)
                             and something that is not a word char
--------------------------------------------------------------------------------
    [a-zA-Z]{3}              any character of: 'a' to 'z', 'A' to 'Z'
                             (3 times)
--------------------------------------------------------------------------------
    \s+                      whitespace (\n, \r, \t, \f, and " ") (1
                             or more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    \d{1,2}                  digits (0-9) (between 1 and 2 times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
      ,                        ','
--------------------------------------------------------------------------------
      \s*                      whitespace (\n, \r, \t, \f, and " ")
                               (0 or more times (matching the most
                               amount possible))
--------------------------------------------------------------------------------
      \d{4}                    digits (0-9) (4 times)
--------------------------------------------------------------------------------
    )                        end of look-ahead
--------------------------------------------------------------------------------
  )                        end of negative lookbehind
--------------------------------------------------------------------------------
  ,                        ','

Upvotes: 1

Related Questions