如何为JS的replace方法添加条件,实现直双引号仅成对转弯引号?
解决方法
你原来的正则末尾的"?把闭合直双引号设为了可选匹配,不管是否存在实际的闭合直引号,都会强制拼接”,才会出现多余闭合弯引号的问题。
你可以用带分支的正则加替换回调处理两种场景:成对的直引号完整替换为左右弯引号,单个的直引号只替换为左弯引号,修改后的代码如下:
const text = `"This has an opening and a closing quote." "This only has an opening quotes This doesn't have quotes.` const result = text.replace(/"([^"\n\r]*)"|"/g, (match, captured) => { // 匹配到成对直引号的场景 if (captured !== undefined) { return `“${captured}”` } // 匹配到单个直引号的场景 return '“' }) console.log(result)
逻辑说明
- 正则优先匹配
"([^"\n\r]*)":即左右都有直双引号、中间不含引号和换行的完整成对内容,中间文本会被捕获 - 没有匹配到成对内容时,才会命中单个直引号
"的分支 - 替换回调通过判断是否存在捕获内容,决定是否添加右弯引号
运行后输出完全符合预期:
“This has an opening and a closing quote.”
“This only has an opening quotes
This doesn't have quotes.
内容的提问来源于stack exchange,提问作者wyc
相关产品推荐
相关产品推荐

