以下代码将直双引号替换为弯双引号:
const input = `"Line 1"
"Line 2
"Line 3"
Line 4`
const output = input.replace(/\"(.*?)(\")/g, '“$1”')
console.log(output)
但是有一个问题。有时,一行没有结束双引号(这表明引号在下面的行中继续)。所以开头的双引号不会被替换:
`“Line 1$1”
"Line 2
“Line 3$1”
Line 4`
如何修改正则表达式,以便它也替换后面没有结束双引号的左双引号?
期望的输出:
`“Line 1$1”
“Line 2
“Line 3$1”
Line 4`
最佳答案
你可以使用
.replace(/^"([^"\n\r]*)"?$/gm, "“$1”")
请参阅regex demo 。正则表达式匹配所有非重叠的出现 (g
),同时将行开头与 ^
匹配,将行结尾与 $
匹配(由于 m
)和手段
^
- 行的开头"
- 双引号([^"\n\r]*)
- 第 1 组:除"
、CR 和 LF 之外的任何零个或多个字符"?
- 可选的"
字符$
- 任何行的结尾。
查看 JavaScript 演示:
const input = `"Line 1"
"Line 2
"Line 3"
Line 4`
const output = input.replace(/^"([^"\n\r]*)"?$/gm, '“$1”')
console.log(output)
关于javascript - 如何使以下正则表达式匹配并替换未闭合的双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68952716/