如何使以下正则表达式匹配并替换未闭合的双引号?
How to make the following regex match and replace unclosed double quotes?
以下代码将直双引号替换为弯双引号:
const input = `"Line 1"
"Line 2
"Line 3"
Line 4`
const output = input.replace(/\"(.*?)(\")/g, '“”')
console.log(output)
但是有一个问题。有时一行没有结束双引号(表示引号在下一行继续)。所以开头的双引号不会被替换:
`“Line 1”
"Line 2
“Line 3”
Line 4`
如何修改正则表达式,以便它也替换没有后跟结束双引号的开始双引号?
期望的输出:
`“Line 1”
“Line 2
“Line 3”
Line 4`
我会连续2次replace()
,如果可以的话:
- 一个用于缓存
"...'"
表单
- 另一个用来抓剩下的
"...
const output = input
.replace(/\"(.*?)(\")/g, '“”')
.replace(/\"(.*)/g, '“”')
但我不明白你是想在一个唯一的最终字符串中匹配多行结果,还是只是在每行的末尾添加引号
- 列表项
const input = `"Line 1"
"Line 2
"Line 3"
Line 4`
const output = input.replace(/"([^"/]*)"/g, '“”')
console.log(output)
您可以使用
.replace(/^"([^"\n\r]*)"?$/gm, "“”")
见regex demo。正则表达式匹配所有非重叠事件 (g
),同时匹配行首 ^
和行尾 $
(由于 m
)和 means
^
- 行首
"
- 双引号
([^"\n\r]*)
- 第 1 组:除 "
、CR 和 LF 之外的任何零个或多个字符
"?
- 一个可选的 "
字符
$
- 任何行的结尾。
查看 JavaScript 演示:
const input = `"Line 1"
"Line 2
"Line 3"
Line 4`
const output = input.replace(/^"([^"\n\r]*)"?$/gm, '“”')
console.log(output)
以下代码将直双引号替换为弯双引号:
const input = `"Line 1"
"Line 2
"Line 3"
Line 4`
const output = input.replace(/\"(.*?)(\")/g, '“”')
console.log(output)
但是有一个问题。有时一行没有结束双引号(表示引号在下一行继续)。所以开头的双引号不会被替换:
`“Line 1”
"Line 2
“Line 3”
Line 4`
如何修改正则表达式,以便它也替换没有后跟结束双引号的开始双引号?
期望的输出:
`“Line 1”
“Line 2
“Line 3”
Line 4`
我会连续2次replace()
,如果可以的话:
- 一个用于缓存
"...'"
表单 - 另一个用来抓剩下的
"...
const output = input
.replace(/\"(.*?)(\")/g, '“”')
.replace(/\"(.*)/g, '“”')
但我不明白你是想在一个唯一的最终字符串中匹配多行结果,还是只是在每行的末尾添加引号
- 列表项
const input = `"Line 1"
"Line 2
"Line 3"
Line 4`
const output = input.replace(/"([^"/]*)"/g, '“”')
console.log(output)
您可以使用
.replace(/^"([^"\n\r]*)"?$/gm, "“”")
见regex demo。正则表达式匹配所有非重叠事件 (g
),同时匹配行首 ^
和行尾 $
(由于 m
)和 means
^
- 行首"
- 双引号([^"\n\r]*)
- 第 1 组:除"
、CR 和 LF 之外的任何零个或多个字符
"?
- 一个可选的"
字符$
- 任何行的结尾。
查看 JavaScript 演示:
const input = `"Line 1"
"Line 2
"Line 3"
Line 4`
const output = input.replace(/^"([^"\n\r]*)"?$/gm, '“”')
console.log(output)