如何获取正则的反向匹配,以选中引号外内容用于preg_replace
反向匹配正则实现方案
要实现你需要的反向匹配(选中原正则未覆盖的引号外区域,排除.replace()第一个参数和引号内内容),只需调整原正则的逻辑:将无需替换的内容标记为跳过,匹配剩余所有目标区域。
最终正则
(\(\s*/.*?/\w*\h*,|(?|(")[^"\\]*(?:\\.[^"\\]*)*"|(')[^'\\]*(?:\\.[^'\\]*)*'))(*SKIP)(*F)|.
逻辑说明
- 分组内包含两类需排除的内容:
\(\s*/.*?/\w*\h*,:匹配.replace(/'/g, ...)这类调用中的第一个参数部分- 单/双引号内的文本(含转义引号处理):
(?|(")[^"\\]*(?:\\.[^"\\]*)*"|(')[^'\\]*(?:\\.[^'\\]*)*')
(*SKIP)(*F):标记上述内容为跳过项,不参与替换|.:匹配所有未被跳过的单个字符,即你需要替换的引号外区域
使用preg_replace时,该正则匹配到的内容就是引号外的目标区域,直接替换为你需要的内容即可。
内容的提问来源于stack exchange,提问作者abe1432181
相关产品推荐
相关产品推荐

