JavaScript如何用正则提取括号内内容并剔除外层双引号
解决方案
你可以直接用带可选引号匹配的捕获组正则来实现,无需额外后续处理去除引号的逻辑:
(?<=\()"?(.*?)"?(?=\))
如果你的正则引擎支持命名捕获,也可以使用更易维护的版本:
(?<=\()"?(?<target>.*?)"?(?=\))
匹配逻辑说明
(?<=\():正向零宽断言,匹配左括号(之后的位置,不会消耗左括号字符"?:匹配0个或1个双引号,括号内容开头存在引号就直接匹配剔除,不存在就跳过(.*?)/(?<target>.*?):非贪婪匹配所有内容,这部分就是你需要的纯净结果,自动排除了前后的外层双引号"?::匹配0个或1个结尾的双引号,存在就匹配剔除,不存在就跳过(?=\)):正向零宽断言,匹配右括号)之前的位置,不会消耗右括号字符
验证效果
针对你给出的两种输入样例:
- 输入
Key ("vinCode")=(V1234567890123456) some text.,提取结果为vinCode、V1234567890123456 - 输入
Key (vinCode)=(V1234567890123456) some text.,提取结果同样为vinCode、V1234567890123456
完全符合预期提取要求。
内容的提问来源于stack exchange,提问作者user15913196
相关产品推荐
相关产品推荐

