0

文字列内のエスケープされていないスラッシュをバックスラッシュに置き換えたい。しかし、奇妙なことが起こりました:

"\content\hs\gj\home.css".replace(/\\/gi,"/")

「contenthsgjhome.css」を返します。私はそれを

"\\content\\hs\\gj\\home.css".replace(/\\/gi,"/")`

その後、期待どおりに動作しますが、 nodejs による出力であるため、文字列を変更することはできませんpath.join("conetnt", "hs", "gj", "home.css")

どうすればいいですか?

4

2 に答える 2

6

それが返される理由は、文字列リテラル内の単一のバックスラッシュは、次の文字 (または など)"contenthsgjhome.css"をエスケープする意味がない限り無視されるため、実際には文字列にバックスラッシュがまったく含まれていないためです。はエスケープとして特別な意味を持たないため、 と解釈されます。"\\""\n""\c""c"

"\content\hs\gj\home.css"

最終的には次のようになります:

"contenthsgjhome.css"

したがって.replace()、見つけるためのバックスラッシュはありません。

(文字列リテラルでバックスラッシュをエスケープした場合、それはリテラル構文の一部であり、一度解釈されると、結果の文字列にはバックスラッシュが 1 つしか含まれないことに注意してください。)"\\""\"

おそらく、「それは FS による単なる出力です」という意味を説明できれば、誰かがより多くのアドバイスを提供できるでしょう。これは、JSP/ASP/PHP/etc が JS コードを出力する場合によくある問題です。JS インタープリターが認識する前に、JSP/ASP/PHP/etc コードでエスケープを行う必要があります。

于 2012-05-25T06:34:01.093 に答える