2014-12-13 2 views
1

어디서나이 솔루션을 찾을 수는 없지만 올바른 용어가 없기 때문에 생각합니다.Regex in JS - 대체 할 일치 추가

나는이 있습니다

var text = "Foo:Bar"; // I want -> "Foo: Bar" 
text = text.replace(new RegExp("Foo:[a-z]", "ig"), "Foo: "); 

내가 foo의 많이 가지고, 내가 콜론 뒤에 공백을 추가 할 수 있습니다. 나는 콜론이 그 직후에 문자를 가지고 있다고 말할 수 있다면 그것을하고 싶다. 내가 위를 할 때, 내가 얻을 :

// -> "Foo: ar" 

가 어떻게 [a-z] 일치하고, 교체의 말에 던져 것을 가지고 있습니까?

+0

당신은 정규식에 무슨 문제가 있습니까? 캡처 그룹을 추가하기 만하면됩니다. – sln

+0

@sin, 캡쳐 그룹이 무엇인지 모르겠다 ... – dthree

답변

2

필요한 것은 positive lookahead assertion입니다. 정규 표현식의 [a-z]은 알파벳을 소비하지만 문자를 소비하지 않습니다. (?=[a-z])이 긍정적 인 lookahead는 일치 (Foo:) 다음에 알파벳이 와야 함을 나타냅니다. 따라서이 정규 표현식은 알파벳이 뒤따라야 만 모든 Foo: 문자열을 일치시킵니다. 일치하는 Foo:Foo:<space>으로 바꾸면 원하는 결과를 얻을 수 있습니다.

var text = "Foo:Bar"; // I want -> "Foo: Bar" 
 
text = text.replace(new RegExp("Foo:([a-z])", "ig"), "Foo: $1"); 
 

 
alert(text);

이 또한 내가 정규 표현식 리터럴 표현을 사용합니다 :

text = text.replace(new RegExp("Foo:(?=[a-z])", "ig"), "Foo: "); 

또는

text = text.replace(/Foo:(?=[a-z])/ig, "Foo: "); 
+0

++ for nailing it, for text/text.replace (/ Foo : ([az])/ig, 'Foo : $ 1' 그게 무엇인지 말해 주려고. 그게 효과가 있었어! 감사. – dthree

+0

당신은 환영합니다 :-) –

1

당신은 문자열을 대체 간단한 캡처 그룹을 사용에 $1로 참조 할 수 있습니다 contr 대신에 uctor :

text = text.replace(/Foo:([a-z])/ig, "Foo: $1"); 
+0

이것은 내가 원래 생각하고 있던 것입니다. 고마워. 그리고 나는 그것을 미래에 사용할 것이다! – dthree