2012-04-24 9 views
1

その進コードで一部の文字を置換するための正規表現は、それは、置き換えされていますJavascriptを:私は私が望むものに似た何かをする例を見つけることができませんでした

%を%で25

空間

と23%

と%2F

#」の26%

/付き&参考のためにスペース

\私はString.replaceAllでGWTを使っていますが、それはそれはとにかくに変換する内容であるので、私はJavascriptをについて聞いていますのよ。私は(コンポーネント)URIエンコーディングについて知っていますが、それは私が何をしたのではない、私はこれらの文字が必要です。

後の編集:私は今、それがこのように行われます、1つのまたは2の正規表現でそれを行う方法を探しています:

splits[i].replaceAll("%", "%25").replaceAll("&", "%26").replaceAll("/","%2F").replaceAll("#", "%23").replaceAll("\"", "").replaceAll("\\\\", " ");

が、これは私には醜いようです。 JavaScriptで

答えて

8

(これはあなたがについて尋ねた言語であるJavaScriptの、のためである。それはJavaでかなり異なるものになることに注意してください。)

が、これは正規表現とpassing in a functionreplaceを使用して簡単です:

var str = "testing % &/# \" \\"; 
var result = str.replace(/[%&\/#"\\]/g, function(m) { 
    return (m === '"' || m === '\\') ? " " : "%" + m.charCodeAt(0).toString(16); 
}); 

Live example |あなたは二度ではなく何度も文字列をスキャンしてもかまわない場合source

、それはビットを見ることができます(私はそれはそれだけの価値だと思うことは十分ではないが)単純

var str = "testing % &/# \" \\"; 
var result = str.replace(/["\\]/g, " ").replace(/[%&\/#]/g, function(m) { 
    return "%" + m.charCodeAt(0).toString(16); 
}); 

...理由代わりに"\を交換して、一致したものがないかチェックしてください。 | source

+0

+1私は知りませんでした*あなたはそれを行うことができました! –

+0

偉大な答え、私は少し待って、解決策としてそれをマークします。それは私のアプリでは本当にうまくいかないが、それは優雅に質問を解決する。私は、capture-> replaceを使って汎用/標準の正規表現でそれを行う方法があるかどうかを調べていました。 – brainwash

+0

@brainwash:* "キャプチャ - >置き換えで汎用/標準の正規表現を使用する方法があるかどうかを調べていました..." * JavaScriptでは使用できません。 .replace(/(t)(。)/ g、 "$ 2 $ 1") '=>' "etsitng" ')のようにキャプチャグループやプレースホルダを使って物事を移動することはできますが、変換*、関数を使用する必要があります。私はあなたが書く関数にコールバックすることなく文字を文字コードに変換する正規表現エンジンに精通していません(正規表現での私の経験の多くはJavaScriptで書かれています) 。 –

0
String.replace(/%/, '%25').replace(/&/, '%26').replace(/\//, '%2F').replace(/#/, '%23').replace(/"/, ' ').replace(/\\/, ' '); 
+1

これは私が今行っていることですが、1つまたは2つのステップでそれを行う方法があるかどうかを調べていました。 – brainwash

+1

上記のいくつかの問題:1. 'String.replace'関数がなく、' replace'は 'String'コンストラクタ関数ではなく、String * instances *(' String.prototype'から継承)の関数です。 2.文字列を繰り返しスキャンします。 3.これは、各文字の*最初の*出現を置き換えるだけで、それらのすべてではありません。 –

関連する問題