如何修改正则匹配替换未闭合双引号实现直引号转弯引号?
解决方案
原有正则要求必须同时匹配成对的直双引号才会执行替换,当存在未闭合的开头直双引号时,匹配逻辑不触发,导致对应引号未被替换为左弯引号。
修改方案
你可以将结尾双引号设置为可选匹配,配合replace的回调函数判断是否存在闭合引号,分别输出对应的替换结果,示例代码如下:
const input = `"Line 1" "Line 2 "Line 3" Line 4` const output = input.replace(/"([^"]*)("?)/g, (match, content, closeQuote) => { // 存在闭合双引号时同时输出左右弯引号,否则仅输出左弯引号 return closeQuote ? `“${content}”` : `“${content}` }) console.log(output)
正则说明
- 开头的
"匹配直双引号开头 ([^"]*)捕获分组1,匹配所有非双引号的文本内容("?)捕获分组2,匹配可选的结尾直双引号,存在则说明是成对引号,不存在则说明是未闭合的开头引号
输出结果
运行上述代码后得到的输出和预期完全一致:
`“Line 1” “Line 2 “Line 3” Line 4`
内容的提问来源于stack exchange,提问作者wyc
相关产品推荐
相关产品推荐

