【问题标题】:Escape apostrophes inside double quoted strings (Javascript)在双引号字符串中转义撇号(Javascript)
【发布时间】:2011-02-08 20:11:21
【问题描述】:

假设我有一个字符串需要在 javascript 中求值,例如:

window.some_class.update( 'Runner', 'update_runner', '{"runner":{"id":"1","name":"Nin's Lad" } }');

为了让 eval() 对其进行评估,我需要转义 runner_name(Nin's Lad)中的撇号。这可以用正则表达式吗?我不想转义 Runner 和 update_runner 周围的单引号。我只想转义双引号内的任何单引号。

谢谢,

【问题讨论】:

  • 您是否也在使用 JavaScript 进行预处理步骤?还是其他一些正则表达式工具?而且,是否会有任何撇号已经逃逸?
  • JSON 字符串是来自外部还是为什么要使用 JSON 字符串?

标签: javascript regex escaping


【解决方案1】:

这适用于您的具体情况,但我敢肯定有人会指出一些极端情况:

yourString = yourString.replace(/"([^"]*)'([^"]*)"/g, "$1\\'$2");

另外,我想指出this page的最后一段:

eval 是邪恶的

eval 函数是 JavaScript 中被滥用最多的特性。避免它。

如果您使用eval,可能有更好的方法来实现您的目标。

【讨论】:

  • 我正在使用 rails + juggernaut 插件,不幸的是,它已经准备好将更新消息评估为方法调用。感谢您的回答和提示!
  • 对于其他阅读本文的人,我不得不稍微修改一下以重新添加双引号。"\"$1\\'$2\""
  • 写这个的人,也写了这个:json.org/json2.js 其中包含“eval”。如果有更好的方法来实现目标,他自己为什么不使用呢?
  • @Kinopiko 我说有可能更好的方法。仅仅因为 Crockford 将其标记为邪恶和滥用并不意味着没有非常具体的用例。
  • @George 也不要忘记在末尾添加 /g 标志,因此它会替换所有出现的位置。我编辑了我的帖子以包含此内容。
【解决方案2】:
s = s.replace(/'(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)/g, "\\'");

如果字符串中前面有奇数个引号,则与撇号匹配。如果字符串和您发布的一样简单,那应该意味着撇号在双引号字符串中,但它远非防弹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多