2016-04-14 9 views
0

私はクライアントUIのテストを書こうとしています。JSONはブラウザでは解析されますがnode.jsでは解析されません

奇妙なことに、私のJSON文字列:ブラウザによってJSON.parseによって解析されるために使用

{"match":"\s?5\.7\s?\<=\>\s?7","success":"null-coalesce-operator"} 

(クローム)とは、次のようになります。

{ 
    match: "\s?5\.7\s?\<=\>\s?7", 
    success:"null-coalesce-operator" 
} 

すべてがうまくある、

しかし、node.js env内のmochaでその部分を実行すると、次のようになります。

{"match":"\s?5\.7\s?\<=\>\s?7","success":"null-coalesce-operator"} 
     ^

SyntaxError: Unexpected token s 
    at Object.parse (native) 
    ... 

誰もこのようなものを経験しましたか?任意のtippのためのthx。

<!doctype html><html><body><div data-meta="{&quot;match&quot;:&quot;\\s?5\\.7\\s?\\<=\\>\\s?7&quot;,&quot;success&quot;:&quot;null-coalesce-operator&quot;}"></div></body></html> 

それだけで一行:

ノードのバージョンがあるv5.7.1

モカバージョンは、私がテストし2.4.5

UPDATE HTML文字列をされています文字列なしの文字列\ n改行と同じ。

答えて

1

スペシャル・キャラクター(\ n =改行、\ r =>キャリッジリターンなど)も解析していたので、クロムには何もなかったと思います。だから、ノードに解析する前に、あなたは\\によって各\を交換する必要があり、あなたはあなたの中にantislashは、正規表現したいので:解析するとき、それは\ sのA、教えてくれます

json_string = json_string.replace(new RegExp('\\\\', 'g'), '\\\\') //we have to use regex, because when using replace with string, it only replaces the first occurence... 

そうでない場合は、:「これは特殊文字でありますsによって識別される。しかし、私はトークンを持っていません。だから私はエラーを投げる "

+0

申し訳ありませんが、RegExも変更されていますので、表現は便宜上同じでなければなりません。私は尋ねます。その場合、なぜブラウザのJSON.parseに問題がないのでしょうか? – zavalit

+0

それはregexprを変更しません!テストしましたか?文字列内に** **アンチ・ラッシュを書くので、文字列には** ** **が含まれています!正規表現は '\ s'を読み込みます...しかし、なぜそれがブラウザで動作するか知っている、私はクロムでそれをテストした、それは同じエラーを投げる – Vincent

+0

jo、私はそれをテストした:私は{match: '\\ s?5 \\。7 \\ s?\\ <=\\> \\ s?7 '、...} – zavalit

関連する問題