2012-04-24 538 views
1

我一直沒能找到有類似的功能,以我想要的一個例子來取代一些字符,也就是更換:的Javascript:用正則表達式的十六進制代碼

%與25%

&與%26

/用%2F

#與%23

「與空間

\與空間

對於我使用GWT與String.replaceAll參考,但我問的Javascript,因爲這是它被翻譯成反正。我知道(組件)URI編碼,但它不是我所追求的,我只需要這些字符。

後來編輯:我在尋找一種方式來做到這一點在一個或兩個正則表達式,現在它的完成,因爲這:

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

但是這似乎醜陋的我。

回答

8

(這是JavaScript的,這是你問的語言。請注意,這將是在Java中相當不同。)

在JavaScript中,這是微不足道的使用replace使用正則表達式和passing in a function

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); 
}); 

...因爲我們可以單獨做"\替換,並擺脫我們匹配的檢查。 Live example | source

+0

+1我*不知道*你可以做到這一點! – 2012-04-24 10:28:17

+0

偉大的答案,我會稍微等一下,並將其標記爲解決方案;即使它在我的應用程序中不可行,它也可以優雅地解決這個問題。我正在查看是否有一種方法使用捕獲 - >替換的通用/標準正則表達式來執行此操作。 – brainwash 2012-04-24 12:39:36

+0

@brainwash:*「我正在查看是否有方法使用帶捕獲 - >替換的通用/標準正則表達式來執行此操作。」*不在JavaScript中;你可以使用捕獲組和佔位符(例如''testing「.replace(/(t)(。)/ g,」$ 2 $ 1「)'=>''etsitng」')來移動東西,轉換*,你必須使用一個函數。我不熟悉任何可以讓你將字符轉換爲字符代碼而不需要回調你寫的函數的正則表達式引擎(但是我的大部分關於正則表達式的經驗都是在JavaScript中),或者當然,單獨做它們。 – 2012-04-24 12:44:46

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

這正是我現在所做的,但我正在尋找是否有辦法在一個或兩個步驟中完成它。 – brainwash 2012-04-24 10:57:00

+1

上面的幾個問題:1.沒有'String.replace'函數,'replace'是字符串*實例*上的函數*(繼承自'String.prototype'),而不是'String'構造函數。 2.這反覆掃描字符串。 3.這隻會取代每個角色的第一次出現,而不是全部。 – 2012-04-24 11:16:36

相關問題