2016-07-12 2 views
2

"some_text_AAAABB_some_other_text"형식의 문자열이 있습니다. 문자열에는 임의의 짝수 개의 'A'가 있고 'BB'는 'A'다음에 오는 고정 된 문자열입니다. 2n 'A라고 가정하면 정규 표현식을 사용하여'A의 문자열 'A의 길이를 n으로 바꿉니다. 결과는이 정규식으로 달성하기 위해도 가능정규식을 사용하여 문자열의 절반을 일치시킬 수 있습니까? 아니면 일치하는 그룹의 절반을 사용할 수 있습니까?

"some_text_AABB_some_other_text" 

"some_text_AAAABB_some_other_text" 

다음 문자열에 대한

?

변환을 수행하기 위해 V8 JavaScript를 사용하고 있습니다.

+2

사용중인 도구/proramming 언어는 무엇입니까, Marcinie? 또한,''some_text_AAAAABB_some_other_text "'에 예상되는 결과는 무엇입니까? –

+0

'짝수 *'의 숫자와 일치 시키려면 ['(? : A {2}) +'] (https://regex101.com/r/oY8eF9/1)을 사용할 수 있습니다. @ WiktorStribiżew가 지적했듯이, 이상한 일은 어떻게 될 것인가? – Jan

+2

을'(A +) \ 1'과 일치시키고 '\ 1'로 대체하십시오. – SilentMonk

답변

2

두 가지 시나리오가 있습니다. 1) A의 수가 짝수이고, 2) A의 수가 홀수입니다. A의의 짝수 또는 홀수가있는 경우에 당신이 상관하지 않는 경우

, 단지

replace(/(A+)\1BB/g, "$1BB") 

(A+) 일치를 사용하고 그룹 1 하나 이상의 A 가능한 한 많은과에 캡처 \1은 동일한 하위 문자열 (그룹 1에 캡처 된 번호)과 일치합니다. BB은 고정 된 문자열이므로 문자 그대로 패턴에 넣습니다. 당신이 A의 홀수 문자열을 수정하지 않으려면

, 당신은 여기

this regex demo은 첫 번째 캡처 그룹은 시작을 캡처 참조

replace(/(^|[^A-Z])(A+)\2BB/g, "$1$2BB") 

필요 this regex demo

를 참조하십시오 문자열 ^ 또는 [A-Z] 이외의 문자 인 경우 두 번째 캡처 그룹이 1 이상 캡처 A s이고 역 참조는 이제 ID = 2이므로 - \2이 사용됩니다.

+0

여전히 홀수의'A' 시나리오는 미래의 독자들에게 유용 할 수 있으므로 그 비트를 추가했습니다. –

관련 문제