2010-04-16 115 views
1

说我有一个字符串,我需要在JavaScript中评估,如:逃生双引号中的字符串内撇号(JavaScript)的

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

为了eval()函数来评价它,我需要逃脱撇号在runner_name(Nin's Lad)中。这与正则表达式是可以相容的吗?我不想逃避Runner和update_runner的单引号。我只想逃避双引号内的任何单引号。

感谢,

+0

您是否也在使用JavaScript进行预处理步骤?或者其他一些正则表达工具?而且,会不会有已经逃脱的撇号? – 2010-04-16 13:37:48

+0

JSON字符串是来自外部还是你为什么使用JSON字符串? – Gumbo 2010-04-16 14:47:17

回答

3

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

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

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

EVAL 是邪恶

eval函数是JavaScript中滥用最多的功能。躲开它。

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

+2

+1对于eval是邪恶的。 ;) – Amber 2010-04-16 13:43:44

+0

我正在使用rails + juggernaut插件,不幸的是它全部用于评估更新消息到方法调用。感谢您的答案和提示! – 2010-04-16 13:57:16

+0

对于其他人阅读本文,我不得不修改它轻微地添加双引号返回。 “\”$ 1 \\'$ 2 \“” – 2010-04-16 13:58:04

0
s = s.replace(/'(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)/g, "\\'"); 

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