2011-04-12 7 views
0

내가 가지고 RegExp :자바 스크립트 정규식 매칭 불확실성

/.?(NCAA|Division|I|Basketball|Champions,|1939-2011).?/gi

하고 일부는 어떻게 든 "Champion"

,이 일치으로 돌아오고, 내가 미쳤다고 생각 텍스트?

0: "pio" 
1: "i" 
index: 4 
input: "Champion" 
length: 2 

루프

은 여기에 있습니다 :

// contruct the pattern, dynamically 
var someText = "Champion"; 
var phrase = ".?(NCAA|Division|I|Basketball|Champions,|1939-2011).?"; 
var pat = new RegExp(phrase, "gi"); // <- ends up being 
var result; 

while(result = pat.exec(someText)) { 
    // do stuff! 
} 

바로, 내 정규식에 문제가있을가?

EDIT : .?이 단어 중 하나와 일치하거나 그 단어 중 하나를 하나의 문자와 일치시키고 싶다고 말하면 빠르고 간단합니다. 예 :

\sNCAA\s 
NCAA 
NCAA\s 
\sNCAA 

목표 : 나는 몇 가지 간단한 타격을 할 노력하고있어 가 일부 검색 단어를 기반으로 하이라이팅. 페이지의 텍스트 노드를 모두 가져 오는 함수가 있는데,이 변수를 모두 통과하여 변수 phrase에있는 키워드와 일치하는 항목을 강조 표시하고 싶습니다.

내 RegExp을 구축하는 방법을 다시 고쳐야한다고 생각합니다.

+0

'pat'은 RexExp 개체 또는 문자열입니까? 코드에서 문자열입니다. –

+0

@Matt 그것은 실제로 RegExp입니다. 코드를 수정하도록하겠습니다 ... 나는 두 가지 방법으로 모두 작동한다고 생각 했습니까? – samandmoore

+0

당신은 실제로 당신이 원하는 일이나 여기에서 일어날 일을 명시하지 않았습니다. 이제는 그렇게 명확하지 않습니다. – Groovetrain

답변

1

Champion/.?I.?/i과 일치합니다.

출력 결과는 부분 문자열 "pio"와 일치한다는 것을 알 수 있습니다.

아마도 당신은 의미 각각 ^$으로, 시작과 입력의 끝으로 식을 결합 :

/^.?(NCAA|Division|I|Basketball|Champions,|1939-2011).?$/gi 

을 난 당신이 .?을 무시한다고 알고 있지만, 나는 할 수 없습니다 : 그것은 대부분의 가능성이 높습니다. 문제가 계속 발생할 가능성이 큽니다. 왜 그들이 거기에 있는지 설명하고 적절하게하는 방법을 알려줄 수 있습니다. :)

+0

(업데이트 됨) 질문에 설명되어 있습니다. – samandmoore

+0

@samandmoore : 업데이트에'.? '을 언급하지 않았 으면 사용법을 설명합시다. –

+0

그 정보로 업데이트되었으므로 즉시 저장하지 않았습니다. – samandmoore

2

정규식에 시작 (^) 및 끝 ($) 앵커를 추가하십시오. 앵커없이

/^.?(NCAA|Division|I|Basketball|Champions,|1939-2011).?$/gi 

, 정규 표현식의 경기를 시작하고

/.?(NCAA|Division|I|Basketball|Champions,|1939-2011).?/gi.exec('Champion') 

pioi을 일치시킬 수 있습니다 이유 문자열, 어디에서나 종료 할 수 있습니다 그것은 (대소 주위 실제로 매칭이기 때문에 민감하지 않음) I. 모두 당신이 지정하는 경우-무감각의 첫

> /.?(NCAA|Division|Basketball|Champions,|1939-2011).?/gi.exec('Champion') 
null 
2

글쎄, 둘째, 당신은 편지 I 일치되어 당신이 앵커를두고 있지만, ...|I|...을 제거하면 정규식 'Champion' 일치하지 않습니다 일치하는 문자열 중 하나입니다.

Champion

는 때문에 두 경기 /.?I.?/gi

그것은 그러나 때문에 콤마의 /.?Champions,.?/gi 일치하지 않는, pioi 일치합니다.

+0

그리고's' 때문에. –