javascript - 如何使以下正则表达式匹配并替换未闭合的双引号?

标签 javascript regex replace

以下代码将直双引号替换为弯双引号:

 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/

相关文章:

r - 使用 grep 快速检测包含任何值的列

python-3.x - python3 - 将正则表达式映射应用于列

javascript - 序列化 POST 请求 jQuery/Javascript

javascript - 从 td 元素获取 src

javascript - 在 javascript 中使用 switch 语句而不是一堆 if()else if() 是否有任何性能提升?

regex - 在第一个和最后一个逗号上拆分字符串

javascript - 使用 document.getelementbyid 从 javascript 在 html 文档中创建表格

C# 将正则表达式匹配插入数据表

Linux Sed 在替换期间添加新行

javascript - 使用函数代替正则表达式进行替换