2010-07-11 3 views
2
a[b].innerHTML=a[b].innerHTML.replace(RegExp('['+bbc[c][0]+']','ig'),bbc[c][1]) 

이것은 기본적으로 제가 작업하고있는 것입니다. 두 개의 루프로 감싸 져있어 왜 그렇게 보이는지 설명해야합니다. 기본적으로 '[+ array + from] 변수'와 일치하는 것을 대체하고 싶습니다. 저는 무료 포럼을위한 BBCode 스크립트를 만들고 있습니다. 그리고 어떤 BBCode 스크립트에서도 저를 가리 키지 않습니다. 문제는 정규식이 모든 문자와 일치하는 모든 것을 대체한다는 것입니다. 그래서, [, q, c, o, d, e,]를 모두 배열의 두 번째 부분으로 바꿉니다. (QCODE는 BBCode가 사용되는 예제입니다.) 정상/정규 표현식 /에서 []를 사용하는지는 모르지만 지옥이라고 생각합니다. 나는 [] ('\ ['+ v + '\]')를 벗어나려고 노력했다. eval()을 시도했지만 상상할 수있는 모든 것을 시도했다. 모든 것이 그것이되어야하는 것처럼 설정 되었기 때문에 나는이 일을해야하는 것처럼 작동시켜야합니다. 이 문제를 해결하는 방법을 알고 있다면 대답하십시오. 답변을하기 전에 솔루션을 테스트 해보고 싶습니다. 아니요. 아이디어가 얼마나 많은 방법으로이 작업을 시도했는지 생각해보십시오.정규식은 어떤 문자와도 일치하는 모든 것을 대체합니다.

+2

정확한 사례를 테스트하려면 [b] .innerHTML 및 bbc [c] [0]을 알아야합니다. – TNi

+0

TNi에서 암시 하듯이 하나 이상의 단위 테스트를 제공해야합니다. – Dolph

+0

변수 주위에 대괄호가있는 것. 그건 중요하지 않아. 이 포스트에서 말했듯이 qcode가 그 예입니다. 변수의 문자와 일치하는 모든 것을 대체하지 않는 한 ANYTHING으로 지정된 변수 주위의 대괄호를 바꾸면됩니다. 따라서 "This bb is is"대신 "This bbcode is"의 [qcode]를 바꿉니다 (코드 교체). – Ruffian

답변

1

코드가 작동하지 않는 이유는 정규 표현식에 대한 문자열을 취하는 RegExp를 사용하기 때문입니다. 이 문자열에서는 백 슬래시 이스케이프 문자를 이스케이프 처리해야합니다. 다음 작업을 수행 할 수 있습니다 :

​var str = 'Before. [qcode] After.'; 
alert(str.replace(RegExp('\\[qcode\\]', 'ig'), 'During.'));​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
+0

그게 효과가있다. 내가 생각해 봤어야 할 것 같아. 오직 한 번만 답을 높게 평가할 수 있다면 감사합니다. – Ruffian

3

오른쪽 이스케이프 문자 사용

RegExp('\\['+bbc[c][0]+'\\]','ig'), 

/는 (사용하지 않는 정규식 리터럴을 제외하고) 그냥 일반 문자를 이스케이프 문자는 \입니다. 문자열 리터럴에 대해서는 한 번, 정규 표현식에 대해서는 한 번 두 번 이스케이프 처리해야합니다.

+0

내가 서두르고 있었기 때문에 게시물이 오타되었습니다. 나는 올바른 이스케이프 문자를 사용했으나 작동하지 않았다. 그래서 내가 대답하기 전에 시험을 말했습니다. – Ruffian

+2

그런 다음 질문을 수정하십시오. – Dolph

+0

내가 보지 못했다면, 1 분 전에 대답하십시오. – Ruffian

관련 문제