2016-06-08 2 views
0

하여 요구 사항을 달성하는 방법 문자열이있다 : 정규식

[ 'python', 'javascript', 'jsonp' ] 
어떻게 작성하는 방법 :

python php ruby javascript jsonp perhapsphpisoutdated 

내가 p를 포함하지만 포함되지 않은 단어를 반환 할 ph 등 그것?

var result = web_development.match(/\b((?!ph)\w)+\b/g); 

지금까지 더 쓸 방법이 없습니다. 제발 도와주세요!

+0

을 해결하기 어렵다 , 결과를 얻는다. –

답변

0

이 트릭을 수행해야합니다

\b([a-oq-z]+|[a-oq-z]*(p[a-gi-z][a-oq-z]*)+)p?\b 

설명 : 왼쪽 부분을 OR는 'P'없이 일을 일치하기 전에. 오른쪽 부분은 먼저 'p'가없는 선택적 접두사와 일치하고 'p'가 여러 개 있으면 'h'이외의 다른 항목, 'p'가없는 항목 등을 찾습니다. 마침내 아무것도없는 선택적 'p'가 발생할 수 있습니다. 파이썬에서

+0

어딘가에서 테스트 해 보셨습니까? 주어진 문자열과이 정규식을 사용할 때 regexpal.com에서 이상한 결과가 나타납니다. –

+0

해결되었습니다. 두 가지가 잘못되었습니다. 단어 경계 표식이 없어졌으며 no-p 경우에는 선택 사항 인 'p'를 끝에 적용해야합니다 (이 경우 'p'가 끝에 있지만 중간에는 없습니다). "jsonp") –

0

, 그것은 다음 방법 중 하나를 선택이

import re 
sample_string = "python php ruby javascript jsonp perhapsphpisoutdated" 
regex=r"^((?!ph).)*$" 
print [word for word in sample_string.split() if re.search(regex,word)] 
+0

정규식을 사용하여 직접 결과를 반환하고 싶습니다 .... –

0

같이 수행 할 수 있습니다

  • (빈 문자열 ph 순서를 가지고 단어를 대체 할 String.replace를 사용하여 첫 번째 방법 "") 및 String.match 함수 (나머지 문자가 p 인 경우 일치하도록) :

    var web_development = "python php ruby javascript jsonp perhapsphpisoutdated", 
        result = web_development 
            .replace(/\b[a-z]+?ph([a-z]+)?\b|\bph[a-z]+?\b/g, "") 
            .match(/\b([a-z]+?)?[p]([a-z]+?)?\b/g); 
    
    console.log(result); // ["python", "javascript", "jsonp"] 
    
  • 두 번째 방법은 String.splitArray.filter 기능을 사용하여 :

    result = web_development.split(" ").filter(function(word){ 
        return word.indexOf("p") !== -1 && word.indexOf("ph") === -1; 
    }); 
    
    console.log(result); // ["python", "javascript", "jsonp"] 
    
  • 마지막으로 내가 솔루션을 얻을
0

var reg = /\b(?=\w*p)(?!\w*ph)\w+\b/g; console.log(web_development.match(reg)); 는 ... 내가 단 하나의 정규식을 사용하려면