2014-06-09 2 views
0

Javascript 정규식과 속성 구문을 일치 시키려고합니다. 이 작업을 수행 할 수있는 확실한 방법이 있습니까? 난 그냥 문자열이 경로를 포함하는 경우 알아야 할, 내가 경로 구성원을 필요로하지 않는 다음과 같은 -속성 경로에 대한 정규식

someobject.somekey.somechildkey.somegrandchildkey 

같은 문자열과 일치해야합니다. 예를 들어,이

This is some long string that contains a property.path.syntax, and I need to test it. 
+0

더 많은 범위를 지정해야합니다. 어떤 종류의 경로를 지원해야합니까? 'somebody ''somekey ''[some "+"child "+"key "] [foo]'(여기서'foo'는''somegrandchildkey''를 포함하는 변수입니다)라고 가정하면, 이것을 지원해야합니까? 다른 표현식 ('someobject [foo? 'somekey': "someotherkey"]')은 어떨까요? –

+1

JavaScript 식별자 문자의 유효한 목록은 ** large **입니다. '[a-zA-Z_]'만 허용하는 언어가 아닙니다. 기본적으로 속성 이름에는 제한이 없습니다 (예 : 문자열로 사용하는 경우). 속성 이름 리터럴 만 사용할 수 있습니다. 기타 : http://www.ecma-international.org/ecma-262/5.1/#sec-7.6 –

+0

이 응용 프로그램의 경우 경로는 마침표로 구분 된 경로 구문으로 제한됩니다. obj [path] [childpath]가 없습니다. 또한이 구현에서는 "키"가 사람이 읽을 수있는 것이 아니기 때문에 [a-zA-Z]가 유효해야합니다. – thebringking

답변

-1
var expr = /[a-zA-Z_]([a-zA-Z0-9_]*\.[a-zA-Z_][a-zA-Z0-9_]*)+/i; 
expr.test("your.test.case"); 

위의 정규 표현식 :

  • 이 있기 때문에 할 수없는, .test
  • test.
  • test
  • 0test 일치하지 않는 일치하지 않는 일치하지 않는 일치하지 않습니다 Javascript 속성이됩니다 (숫자가있는 변수의 이름을 시작할 수 없습니다)

편집 : Paulchenkiller 제안하고, 또한 마지막에 i을 고려은 "대소 문자 구분"에 의해 스탠드로, 당신은 또한 다음과 같은 짧은 형태로 사용할 수 있습니다

var expr = /[a-z_](\w*\.[a-z_]\w*)+/i; 
+0

'[a-zA-Z0-9_]'='\ w' –

+0

고마워요;) –

+0

이것은 내 테스트 케이스를 만족시키는 것 같습니다. , 고맙습니다. – thebringking

0

같은 문자열이 시도 주어진 :

Demo


/\b(?:\S+?\.)+\S+\b/g 
대부분의 경우에 작동해야 두 단어 경계 (단어로 묶여있다 문자가 아닌 단어 옆에있는 문자). 그런 다음 우리는 1+ 공백이 아닌 문자와 그 다음에 . (그 다음 이스케이프해야 함)을 지연 적으로 반복합니다. @TJCrowder와 마찬가지로, 공백이 아닌 경우 \S을 사용합니다. 속성은 contain many characters입니다. 마지막 기간 이후에는 항상 공백 문자가 아닌 다른 문자 세트가 있어야합니다.

0

한도 내에서 작업을하면 ' 코멘트에서 확인했습니다 :

/(?:[a-zA-Z_$]+[\w$]*)(?:\.[a-zA-Z_$]+[\w$]*)+/g 

Live Copy with details (.이 반복 할 필요가있는 경우 g 플래그)

말한다 :

  • 뭐든지
  • (다시이 불완전한 목록입니다 강조) a-z, A-Z, _, 또는 $로 시작하는 ...
  • 같은 일 하나 이상의 비 캡처 그룹 얹는을 더한 숫자의 수에 따라,하지만 .

로 시작 또는 당신은에 one.thatshould.not 일치하지그것을 필요로하는 경우 그런 다음

blah one.that.1should.not blah

:

/(?:\s|^)((?:[a-zA-Z_$]+[\w$]*)(?:\.[a-zA-Z_$]+[\w$]*)+)(?:\s|$)/g 

Live Copy

한 이전과 같은 일을 말한다

하지만 플러스 :

  • Tequires 공백 또는 시작 - 중 - 입력을 시작합니다 ((?:\s|^)) 및 공백 또는-끝 입력에서 끝 ((?:\s|$)). 당신이 그것의 양쪽에있는 옵션 공백없이 바로 속성 경로를 얻을 수 있도록
  • 그냥 요약하자면

, 자바 스크립트 식별자 문자의 유효 목록보다 훨씬 더 큰 매우 큰 인 캡처 그룹을 사용합니다 \w (이는 [a-zA-Z0-9_] 임). 그 캐릭터 만 허용하는 일부 언어와 다릅니다. 은 ç, ö, ñ (및 아랍어, 일본어 및 중국어 등 ...)와 같이 일반 숫자가 큰 사람 수의이 허용됩니다. 기본적으로 속성 이름에는 제한이 없습니다 (예 : 문자열로 사용하는 경우). 속성 이름 리터럴 만 사용할 수 있습니다. 더보기 : http://ecma-international.org/ecma-262/5.1/#sec-7.6

+0

이것도 공백으로 구분 된 문자열의 일반 단어를 캡처합니다. – thebringking

+0

http://regex101.com/r/uZ6vB5 – thebringking

+0

@ t-j-crowder 예, 분명하지 않았습니다. 예제가 충분하다고 생각했습니다. – thebringking

관련 문제