2014-12-03 2 views
0

나는이 정규식으로 문자열 [ORG] someText 일치 할 수 있었다 : 입력 텍스트 단어 다음에 태그에 아무것도 할 수 /^\[(ORG|PER|LOC)]\s[^\W_]+$/이 반복 패턴과 일치하는 정규식?

var selectedText = "[ORG] dd"; 
 

 
if (selectedText.match(/^\[(ORG|PER|LOC)]\s[^\W_]+$/)) { 
 
    console.log("working"); 
 
}

. [ORG] Lorem [ORG] ipsum

내가 패턴을 그룹화하고 + (하나 이상의 차례 나오는)로 반복하여이 일치하도록 시도 (공백으로 끝나는) :


는 지금은 같은 텍스트를 가지고있다.

이 방법 : /^(\[(ORG|PER|LOC)]\s[^\W_]\s)+$/

그러나 그것을 나던 일치합니다.

기본적으로, 일치해야합니다 :

[tag] sometext 

[tag] sometext [tag2] someOtherText // ending with or without a space 

그래서, 일반적으로는 a tag followed by a space and a word의 패턴을 일치해야합니다.

이 일치 야해 무엇 :

[tag] sometext someMoreText 

[tag] sometext someMoreText [tag9] 

[tag] [tag9] sometext someMoreText 
+1

어떤 특별한 이유 \들 [^ \ W _] + $/g'? – Tomalak

+0

그런 다음 앵커를 제거해야하지만 어쨌든 좋은 지적입니다. – raina77ow

+0

@Tomalak 나는 그것을 작동시킬 수 없었다. :(http://jsfiddle.net/rdesai/27vfd38w/4/ –

답변

1

그것은해야한다 :

/^(\[(ORG|PER|LOC)]\s[^\W_]+(?:\s|$))+$/ 

... 그 공백와 행의 끝 경계 사이에 교대를 (추가입니다 문자열의 마지막 패턴이 공백으로 끝나지 않음).

Demo. 또한 문자열이 해당 패턴과 일치하는지 여부 만 확인해야하는 경우 String#match 메서드는 실제로 잔인합니다. 대신 RegExp#text해야 : 당신은 단순히 세계 플래그`/ \ [(ORG | PER | LOC)]를 사용하지 않는 이유

var tagsPattern = /^(\[(ORG|PER|LOC)]\s[^\W_]+(\s|$))+$/; 
if (tagsPattern.test(str)) { 
    // matches 
} 
관련 문제