2014-01-13 3 views
2

JavaScript 정규 표현식으로 조금 고민하고 있습니다. 무엇이 잘못되었는지 알 수 없습니다. 나는 온라인 도구에서 테스트를 해왔고, 그것이 작동해야한다고 제안했다. 그래서 내가 익숙했던 C# regex와 JavaScript 사이에 뭔가 다른 것이 있다고 가정하고있다.JavaScript 정규 표현식 참조로 대체

내가 함께 일하고 있어요 문자열은 매우 간단합니다 :

[a] + [b] 

내가 사용하려고 해요 정규식의 일치는 다음과 같습니다

/[(?<name>[a-zA-Z0-9])/] 

내가 가진 값을 대체하기 위해 노력하고있어 다음

viewModel.$1.control.value() 

로 날 떠나해야하는 :

viewModel.a.control.value() + viewModel.b.control.value() 

불행히도 나는 항상 나의 가치가 인쇄되어 내 일치가 작동하지 않는다고 제안하지만 왜 볼 수는없는 것입니다. 내가 시도한 유일한 확실한 점은 앞으로와 백 슬래시 사이에서 대괄호를 벗어나는 것을 전환하는 것이었다.

다른 사람이 뭐가 잘못되었을 지 제안 할 수 있습니까?

+3

예, 슬래시로 이스케이프 처리하는 것은 상당히 잘못되어 실제로는 구문 오류 일 수 있습니다. 그래서 먼저 해결할 수 있다면. 다음으로, 내가 아는 한, JavaScript는 명명 된 캡처를 지원하지 않습니다 ... 또한 구문 오류가 있어야합니다. 당신은 당신의 콘솔을 전혀 점검하지 않았습니까? – Ryan

답변

2

Javascript 정규식에는 명명 된 그룹이 없습니다. 이 옵션을 사용합니다 :

var s = '[a] + [b]'; 
repl = s.replace(/\[([a-zA-Z0-9])\]/g, 'viewModel.$1.control.value()'); 
//=> "viewModel.a.control.value() + viewModel.b.control.value()" 
  • 또한 당신은 정규식을 일치시키기 위해 []을 탈출해야합니다.
+1

탈출구를 수정했다는 것을 추가해야합니다. 방금 추가 한 덕분에 –

+0

입니다. – anubhava

+0

나는 전에 보지 못했던 뭔가를 던져 버렸다고 생각한다. 첫 번째 매개 변수는 s.replace에 어떻게 들어가는가? – Ian