在双引号字符串内转义撇号(Javascript)

时间:2010-04-16 13:30:18

标签: javascript regex escaping

说我有一个我需要在javascript中评估的字符串,如:

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

为了让eval()评估它,我需要在runner_name(Nin的Lad)中转义撇号。正则表达式可能吗?我不想逃避Runner和update_runner周围的单引号。我只想逃避双引号内的任何单引号。

谢谢,

2 个答案:

答案 0 :(得分:3)

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

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

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

  

eval 是邪恶的

     

eval函数是JavaScript最被误用的功能。避免它。

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

答案 1 :(得分:0)

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

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