我想替换所有“?”到“%3F”,但它不起作用。
Firebug控制台说:"SyntaxError: invalid regular expression flag %"
我的代码:
var q;
var replacer = new RegExp("?", "%3F");
q = (document.getElementById("q").value).replace(replacer, "");
答案 0 :(得分:3)
请改为尝试:
"sample?".replace(/[?]/g,'%3F')
new RegExp
使用字符串作为修饰符(g|i|m)
如果您想使用新的RegExp,那么您需要这样做new RegExp("[?]", "g");
,如下所示:
var rg = new RegExp("[?]", "g");
"sample?".replace(rg,'%3F');
答案 1 :(得分:2)
RegExp
构造函数的第二个参数是一个字符串,其中包含您要应用于表达式的标志。使用全局(g
)标志替换所有实例。此外,?
是正则表达式中的特殊字符,因此您必须使用\
将其转义。
试试这个:
var replacer = new RegExp("\\?", "g");
q = (document.getElementById("q").value).replace(replacer, "%3F");
或者像这样使用正则表达式文字:
var replacer = /\?/g;
q = (document.getElementById("q").value).replace(replacer, "%3F");
如果要转义所有特殊URI字符,还应考虑使用encodeURIComponent
(或可能encodeURI
)方法:
q = encodeURIComponent(document.getElementById("q").value);
答案 2 :(得分:1)
听起来你要编码要在URL中传递的数据,所以你可能真的想要encodeURIComponent
。
encodeURIComponent('?') //=> "%3F"
当然,这也适用于许多其他特殊角色。
encodeURIComponent('hello?foo#bar') //=> "hello%3Ffoo%23bar"
答案 3 :(得分:0)
var find = "\\?";
var replacer = new RegExp(find, 'g');
q = (document.getElementById("q").value).replace(replacer, "%3F");
编辑:忘记" \\"在"?"
之前答案 4 :(得分:0)
var newelem = oldelem.split("?").join("%3F")
这样就可以了解
答案 5 :(得分:0)
怎么样
var q = encodeURIComponent(document.getElementById("q").value);