正则表达式实现:仅转义括号内文本中的单引号为双单引号
解决方案:转义括号内字符串的单引号
需求说明
需要处理格式为 text1 ('text2','te'xt',...,'text') 的文本,仅将括号内单引号包裹的子字符串内部的单引号替换为双单引号(' → ''),括号外及包裹子字符串的单引号保持不变。
实现方案
通过正则匹配结合替换回调的方式,分两步处理:
- 匹配整个括号内的内容;
- 对括号内每个单引号包裹的子字符串,替换其内部的单引号。
JavaScript 实现
const sourceText = "Some text ('Changes [delete [object] = '1']', 'Changes')"; const escapedText = sourceText.replace(/\((.*?)\)/g, (_, innerContent) => { // 处理每个单引号包裹的子字符串 const processedInner = innerContent.replace(/'(.*?)'/g, (_, str) => { return `'${str.replace(/'/g, "''")}'`; }); return `(${processedInner})`; }); console.log(escapedText); // 输出:Some text ('Changes [delete [object] = ''1'']', 'Changes')
Python 实现
import re def process_inner_quotes(match): inner_content = match.group(1) # 替换子字符串内部的单引号 processed = re.sub(r"'(.*?)'", lambda m: f"'{m.group(1).replace(\"'\", \"''\")}'", inner_content) return f"({processed})" source_text = "Some text ('Changes [delete [object] = '1']', 'Changes')" escaped_text = re.sub(r"\((.*?)\)", process_inner_quotes, source_text) print(escaped_text) # 输出:Some text ('Changes [delete [object] = ''1'']', 'Changes')
原理说明
- 外层正则
\((.*?)\)非贪婪匹配一对圆括号及其内部的所有内容; - 内层正则
'(.*?)'匹配括号内每个单引号包裹的子字符串; - 对每个子字符串的内部内容(
.*?捕获的部分),将所有单引号替换为双单引号,再重新用单引号包裹; - 最后将处理后的括号内容放回原文本,得到最终结果。
内容的提问来源于stack exchange,提问作者Andrey Makeev
相关产品推荐
相关产品推荐

