2011-08-17 7 views
1

나는 다음의 문자열과 일치하기 위해 노력하고있어 : 자바 스크립트 정규식 어려움

  • 포함 [A-Z]

    내가 노력했습니다 다음

    new RegExp(/^[A-Z](?!.*[- ']$).*[a-zA-Z- '\u00E0-\u00EF]$/); 
    

    내 문제가 아닌 내가 할 정규 무엇을 표현 이해할 수 아니에요하지만, 그들이 맞는지 여부. 작동하는 것처럼 보이지만 몇 가지를 놓치는 것처럼 보이는 정규식을 작성하는 것은 매우 쉽습니다 (또는하지 않습니다).

    도움을 주시면 감사하겠습니다.

    편집

    유효한 문자열 : Marie-Noëlle Tranchant, Jean-François Copé ...

  • +0

    유효한 문자열의 예를 들려 줄 수 있습니까? –

    +0

    수정 된 질문 - 유효한 문자열이 추가되었습니다. – Sparkup

    +0

    "은 (는) 서로 옆에 [-]]가 없습니다. 여기에 9 개의 가능성이 있거나 동일한 문자가 세 개인 경우가 두 배가됩니까? – jswolf19

    답변

    3
    /^[A-Z](?:[- ']?[a-zA-Z\u00E0-\u00EF])+$/ 
    

    아래는이 기준을 충족 이유의 증거입니다 반환을 확인하려면 실행할 수 있습니다. 비 캡처 그룹 (?:...)(...)으로 변경하면 조건에 맞는 가장 짧은 정규 표현식입니다. 때문에 ^[A-Z] 여기서 A-Z]

    시작. 전체 일이 일치해야하기 때문에 다른 문자가

    을 금지 - (경기 유니 코드 블록 범위 라틴어 -1 추가)

    은 [A-ZA-Z- '\ u00E0- \ u00EF]을 포함 해당 문자 만 포함하는 문자 집합

    [- ']로 끝나지 않거나 [-']가 서로 인접하지 않습니다.[- '][a-zA-Z\u00E0-\u00EF]

    의 다음 발생에 따라 0 또는 1 발생으로 제한되기 때문에

    적어도 2 개 문자

    을 갖는다

    [A-Z] 일치하기 때문에, 적어도 하나 개의 문자와 후 +(?:...) 그룹에 다른 그룹이 필요합니다.

    +0

    좋은 설명. 고맙습니다. – Sparkup

    +0

    @Stack 101, 오신 것을 환영합니다. 행복한 일치. –

    1

    정규식을 테스트하는 가장 기본적인 방법은 예를 들어, 리터럴 문자열을하는 것입니다 "blah this is text"이며 .match 메서드를 사용합니다. 당신은 (크롬에서 Ctrl 키 + 시프트 + J)는 JS 콘솔을 열고 직접이

    "Marie-Noëlle Tranchant".match(/^[A-Z][-a-zA-Z '\u00E0-\u00EF]*[^- ']$/); 
    
    +0

    내 문제는 놓친 몇 가지 사항입니다 :'Ma5rie-No1ëlle Tra4nc6hant'와'Ma % rie-Noëlle Tranch # ant'가 작동합니다. – Sparkup

    +0

    '/^[A-Z] [- a-zA-Z '\ u00E0- \ u00EF] * [^ -'] $ /'는 어떨까요? –

    1

    나는 당신의 정규 표현식이 당신이 원하는대로 할 것이라고 생각하지 않습니다. [A-Z]으로 시작하고 [a-zA-Z\u00E0-\u00EF]으로 끝나는 문자열을 받아 들여야합니다 (동의하지 않으려는 문자를 포함하여 모든 문자가 포함됨). 물론 이스케이프 처리되지 않은 방법을 알지 못해도 말할 수는 없습니다.

    new RegExp(/^[A-Z](?:(?!--|''| )[a-zA-Z\- '\u00E0-\u00EF])*[a-zA-Z\u00E0-\u00EF]$/); 
    
    1

    편집 -이 스레드를 다시 방문, 나는이 코멘트를 발견 한 후
    을 다시 실행 : '처리 ...

    난 당신이 더 같은 것을 할 생각

    "을하지 않습니다 1 개 옆에 [- '] 표시가있다. 그녀의 "여기에 모두 9 가능성 또는
    의 세 단지 두 배 위로 동일한 문자? - jswolf19 2 일 전
    @ jswolf19 님의 대화명 : 'space''space', -- 또는 ''. - 1 일 전 스택 (101)
    "이 비추어

    , 당신은 jswolf19 @ 무엇을했는지에 갈 필요가

    그의 정규식은 아마 조금 단순화 할 수

    더 :

    PCRE :
    . /^[A-Z](?:([\- '])(?!$|\1)|[a-zA-Z\x{E0}-\x{EF}])+$/

    JS :
    /^[A-Z](?:([\- '])(?!$|\1)|[a-zA-Z\u00E0-\u00EF])+$/

    expanded JavaScript: 
    ^      # start of string 
        [A-Z]      # single A-Z char 
        (?:      # non-capture group 
         ([\- '])     # capture group 1, single char from: [- '] 
         (?! $ | \1)    # not the end of string nor the 
                # char captured in group 1 (backreference) 
        |       # OR, 
         [a-zA-Z\u00E0-\u00EF]  # a single char from: [a-zA-Z\u00E0-\u00EF] 
        )+      # end non-capture group, do 1 or more times 
    $      # end of string 
    

    올바른 것으로 표시하기 전에 답변을 테스트하십시오. 다른 사람들은 향후이 스레드
    을 방문 할 수 있습니다.

    +0

    Ty 자세한 내용은 Ty. – Sparkup

    관련 문제