2014-09-04 57 views
0

我想替換所有「?」到「%3F」,但它不起作用。 Firebug控制檯說:"SyntaxError: invalid regular expression flag %"如何替換所有「?」使用javascript

我的代碼:

var q; 
var replacer = new RegExp("?", "%3F"); 
q = (document.getElementById("q").value).replace(replacer, ""); 

回答

2

的第二個參數的構造函數RegExp是包含你想申請到表達的標誌的字符串。使用全局(g)標誌來替換所有實例。另外,?是正則表達式中的一個特殊字符,因此您必須使用\進行轉義。

試試這個:

var replacer = new RegExp("\\?", "g"); 
q = (document.getElementById("q").value).replace(replacer, "%3F"); 

或者用文字這樣的正則表達式:如果你想逃避所有特殊URI

var replacer = /\?/g; 
q = (document.getElementById("q").value).replace(replacer, "%3F"); 

你也應該考慮使用encodeURIComponent(或可能encodeURI)方法字符:

q = encodeURIComponent(document.getElementById("q").value); 
3

試試這個:

"sample?".replace(/[?]/g,'%3F') 

new RegExp創建使用字符串作爲第二個參數的調節劑(g|i|m)

正則表達式

如果你想使用新的RegExp,那麼你需要這樣做,而不是new RegExp("[?]", "g");這樣的:

var rg = new RegExp("[?]", "g"); 
"sample?".replace(rg,'%3F'); 
+0

您的代碼使用graves而不是引號來代替'\'%3F \''。 – 2014-09-04 22:13:10

+0

@RadGH謝謝剛纔注意到 – Dalorzo 2014-09-04 22:13:49

0
var find = "\\?"; 
var replacer = new RegExp(find, 'g'); 

q = (document.getElementById("q").value).replace(replacer, "%3F"); 

Eidt:忘記了「?」的前面?

+0

這是我的不好,我忘了「\\」 – purist66 2014-09-04 22:20:38

0
var newelem = oldelem.split("?").join("%3F") 

這將這樣的伎倆

0

如何

var q = encodeURIComponent(document.getElementById("q").value); 
1

這聽起來像你編碼一個URL來傳遞數據,所以你可能真的想encodeURIComponent

encodeURIComponent('?') //=> "%3F" 

這當然也適用於許多其他特殊字符。

encodeURIComponent('hello?foo#bar') //=> "hello%3Ffoo%23bar" 
相關問題