2010-04-16 124 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, "\\'"); 

如果字符串前面有奇數個引號,則匹配撇號。如果字符串像你發佈的那樣簡單,那應該意味着撇號在一個雙引號字符串中,但是它遠非防彈。