1

私が望むものと同様のことを行う例、つまり置換する例を見つけることができませんでした:

% と %25

& %26付き

/ %2F 付き

# %23 付き

" スペースあり

\ スペースあり

参考までに、私は String.replaceAll で GWT を使用していますが、Javascript について質問しています。(コンポーネント)URIエンコーディングについては知っていますが、それは私が求めているものではありません。必要なのはこれらの文字だけです。

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

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

しかし、これは私には醜いようです。

4

2 に答える 2

8

(これは、あなたが質問した言語である JavaScript 用です。Java ではかなり異なることに注意してください。)

JavaScript ではreplace、正規表現を使用して関数を渡すことは簡単です。

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

実例| ソース

文字列を 1 回ではなく 2 回スキャンしてもかまわない場合は、もう少し単純に見えるかもしれません (それだけの価値があるとは思えませんが)。

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

..."との\置換を別々に行うことができ、一致したもののチェックを取り除くことができるからです。実例| ソース

于 2012-04-24T10:23:42.877 に答える
0
String.replace(/%/, '%25').replace(/&/, '%26').replace(/\//, '%2F').replace(/#/, '%23').replace(/"/, ' ').replace(/\\/, ' ');
于 2012-04-24T10:23:18.727 に答える