'regex remove line breaks between double quotes without affecting other line break (eager match)

I have a map (key, value pairs) and few of these values have line breaks within them (inside double quotes) which is causing issues in CSS.

How can I remove these link breaks (the ones inside double quotes only) using regex find and replace (suitable in JavaScript).

Input:

  actionIconTransition: " background-color 0.2s,
  color 0.2s, box-shadow 0.2s",
  listItemTransition:
    " background-color 0.2s,
  border-color 0.2s, box-shadow 0.2s",
  primeIconFontSize: " 1rem",
  divider: " 1px solid #dee2e6",

Expected output:

  actionIconTransition: " background-color 0.2s,color 0.2s, box-shadow 0.2s",
  listItemTransition:
    " background-color 0.2s,border-color 0.2s, box-shadow 0.2s",
  primeIconFontSize: " 1rem",
  divider: " 1px solid #dee2e6",

I have tried many regexes but they are either removing line breaks in last two lines too, or don't do anything at all.



Solution 1:[1]

I found the answer. Adding it so that newbies get benefited.

The following regex select the line breaks only inside the double quotes or single quotes without affecting other lines

Find: [^"'],\n

Replace: ,

Javascript code for doing the same

.replace(/[^"'],\n/gm,",");

The flags "gm" above is optional. Use it if your strings span across multiple lines and there are multiple occurences for the given pattern which needs to be replaced.

Note: This answer is useful for my usecase. If anyone faces slightly different problem I can help with a regex with their usecase.

Solution 2:[2]

Use

let test_str = `actionIconTransition: " background-color 0.2s,
  color 0.2s, box-shadow 0.2s",
  listItemTransition:
    " background-color 0.2s,
  border-color 0.2s, box-shadow 0.2s",
  primeIconFontSize: " 1rem",
  divider: " 1px solid #dee2e6",`
console.log(test_str.replace(/"[^"]*"|'[^']*'/g, (z) => z.replace(/[\r\n]+/g, '')))

I.e. remove carriage return and line feed characters between quotes only.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jagan Pandurangan
Solution 2 Ryszard Czech