You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript的eval中正确处理含转义引号的字符串?

问题分析

你遇到的问题根源是模板字符串的转义规则——当你用模板字符串写\'时,JavaScript会把它解析成单个',最终传给eval的字符串变成var a='sister's',这明显违反JS语法,自然抛出解析错误。正则替换确实不靠谱,嵌套转义、多引号类型的组合会让正则逻辑异常复杂,很容易漏处理边界情况。

通用解决方案

1. 保留原始转义字符(适用于代码中定义的字符串)

如果userString是你在代码中用模板字符串定义的,直接用String.raw()包裹模板字符串,它会忽略模板字符串的转义规则,完整保留所有原始字符(包括反斜杠):

var userString = String.raw`var a='sister\'s'`
eval(userString) // 正常执行,此时userString的值为 "var a='sister\\'s'"

2. 正确处理外部输入的字符串(适用于用户输入/接口获取的内容)

如果字符串来自外部(比如用户输入、接口返回),分两种情况处理:

  • 如果是原始文本输入(比如用户直接输入sister's),不需要手动转义,只需要把输入里的引号转义后再包裹到代码字符串中:
    // 假设userInput是用户输入的"sister's"
    var userString = `var a='${userInput.replace(/'/g, "\\'")}'`;
    eval(userString);
    
  • 如果是已经转义过的JS代码字符串(比如接口返回的就是var a='sister\'s'),需要确保后端返回的字符串包含双反斜杠(\\'),这样前端拿到的字符串才会保留正确的转义字符,直接传给eval即可。
重要提醒

永远谨慎使用eval——执行用户可控的代码存在极高安全风险(比如XSS攻击、恶意代码执行),能不用就不用。如果只是处理数据或简单逻辑,优先用JSON.parse、函数封装等更安全的方式替代。

内容的提问来源于stack exchange,提问作者MOHAMED SIKKANDAR AFZAL M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:20:00