2014-09-04 6 views
0

나는 모든 "?" "% 3F"까지 올리지 만 작동하지 않습니다. 파이어 버그 콘솔은 말한다 : "SyntaxError: invalid regular expression flag %"모든 "?" 자바 스크립트를 사용하여

내 코드 :

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를 사용하려면 대신이 작업을 수행해야합니다.이 같은:

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

코드는'\'% 3F \''에 대해 따옴표 대신 graves를 사용합니다. –

+0

@RadGH 고마워요. – Dalorzo

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

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

Eidt : "\\"infront of "?"

+0

그게 내 잘못 이었어. "\\" – purist66

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

이 트릭

0

을 할 것인가에 대한

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

당신은 아마 실제로 encodeURIComponent을 원하는 있도록하는 URL에서 전달되는 데이터를 인코딩하는 것처럼 소리.

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

물론 많은 다른 특수 문자에도 적용됩니다.

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