'Replacing an opening quote when there isn't a closing quote

The following code is replacing opening and closing straight double quotes by opening and closing curly double quotes:

const string = `Not dialogue not dialogue.

"Dialogue dialogue.

"Dialogue dialogue."

"Dialogue," not dialogue. "Dialogue."`

const result = string.replace(/"([^"\n\r]*)"/g, '“$1”')

console.log(result)

How to modify this code so the opening straight double quote in "Dialogue dialogue (second line) is also replaced by an opening curly double quote (without adding a closing curly double quote at the end of the line)?

Desired output:

Not dialogue not dialogue.

“Dialogue dialogue.

“Dialogue dialogue.”

“Dialogue,” not dialogue. “Dialogue.”


Solution 1:[1]

You can use

const string = `Not dialogue not dialogue.

"Dialogue dialogue.

"Dialogue dialogue."

"Dialogue," not dialogue. "Dialogue."`

const result = string.replace(/"([^"\n\r]*)("|$)/gm, (x,y,z) =>  z == '"' ? `“${y}”` : `“${y}`)

console.log(result)

Details:

  • " - a double quote
  • ([^"\n\r]*) - Group 1: any zero or more chars other than ", CR and LF
  • ("|$) - Group 2: " or end of a line (m makes $ match the end of any line).

The (x,y,z) => z == '"' ? `“${y}”` : `“${y}` replacement replaces with “ + Group 1 value + ” if Group 2 value is ", else, the replacement is “ + Group 1 value.

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