2014-10-13 2 views
0

정말이 것을 이해할 수 없습니다.서브 패턴을 건너 뛰는 JavaScript 정규식

다음 중 이중 대괄호가 이스케이프됨을 의미하는 사용자 지정 문자열과 함께 여는 중괄호 (예 : {content})로 표시된 세 그룹과 일치하는 문자열이 있습니다.

SetValue:{1} when {OVERVIEW{{}}.Debug=1} else {0} 
// Here is an actual real life example 
ValidWhen: {! Matches('^\\d{{3}}\\s\\d{{3}}\\s\\d{{3}}[\\s\\S]', COLLECTION.AccountNumber)} {Account Number must not be more than 9 numbers.} 

나는 {OVERVIEW{{}}.Debug=1}로 두 번째 그룹과 일치하는 대신 {OVERVIEW{{ 내가 그것을 중지 방지하기 위해 lookbehind을 사용할 수있을 거라고 생각 나는이 정규식을 사용하고있어 가장 가까운을 위해 정규식을 알아낼 수 없습니다 이중 중괄호에.

/{(?!\}).*?\}/ 

이 경우에도 가능합니까? 아니면 좀 더 정교한 문자열 파싱이 필요합니까?

+0

@MarcoBonelli : 없음 정확한 중복. 이 중괄호는 중첩되지 않습니다. – nhahtdh

+0

이'\\ d {{3}}'정규식이란 무엇을 의미합니까? –

+1

@nhahtdh'{{}} '안에 아무 것도 없으면 정규 표현식이 작동하지 않습니다 .. –

답변

3

다음 정규식 작품 :

/{(?:[^{}]|{{|}})*}/ 

우리는 단순히 괄호 내부에 {}을 허용, 더블 {{}} 만 할 수 있습니다.

{{0}} text 

이 정규식은 대부분 잘못된 {0}을 일치 : 여기

1

위의 정규식 예상치 못한 결과를 반환 할 수 있다는 일부 입력합니다.

{{ OVER} 

언밸런스가있는 중괄호와 잘못된 코드입니다.

{ A {B } C} 

중첩 된 괄호 -이 유효하지만 정규식 위 {B }을 사로 잡고 있는지 확실하지 않습니다.

Demo on regex101

+0

작품은 매력, ​​빨리, 고마워요. – Ally

1
{[^}{]*}|{\S+} 

시도해보십시오. 데모보기. 유효한 입력 1에 대한

http://regex101.com/r/sK8oK9/6

+0

감사하지만 공백없이 구분합니다. 디버그 = 1} else {0}' – Ally

+0

@Ally 지금 시도하십시오 .... – vks

+0

왜 실패할까요? http://regex101.com/r/sK8oK9/ 5? –