2012-11-24 3 views
0

사용자 입력 문자열 match을 미세 조정하면 match 플래그가 설정된 g 플래그가 설정되어 있고 정규식이 일치하지 않아이 문자열이 일치하지 않아서 null을 반환 할 수 없으므로 오류가 발생합니다. 이는 정의 할 수 없습니다.이 둘은 동일하거나 다른 것보다 더 좋고/더 안전합니까?

그래서 두 가지 옵션이 남았습니다. 말할 수있는 한, 그들은 동일합니다. 그러나 나는 그것을 올바르게 이해하고 있는지 확인하고 싶습니다.

var tldMatcher = /[^.]+\.?$/g 
     , tld = str.match(tldMatcher) ? str.match(tldMatcher)[0] : null; 

... 그리고 ...

var tldMatcher = /[^.]+\.?$/g 
     , tld = str.match(tldMatcher) && str.match(tldMatcher)[0]; 

어떤 생각이?

+1

* 더 나은 * 주관적입니다. 개인적으로, 나는'var tld = null, matches = str.match (tldMatcher);와 같은 것을 좋아하지 않는다. if (matches) tld = matches [0]'이 더 좋을 것입니다. –

+2

'match'를 두 번 호출하지 마십시오. 한 번 호출하고 결과를 저장하고 null이 아닌 경우 관심이있는 요소를 추출하십시오. – Lee

답변

1

.matchg으로 사용하면 개인적으로 항상 || []을 사용합니다. 즉 :

var matches = str.match(/regex/g) || []; 

matches 항상 문자열 (그러나 비어)의 배열 될 것입니다 보장합니다. 귀하의 경우에는 다음과 같이 할 수 있습니다 :

var tldMatcher = /[^.]+\.?$/g 
    , tld = (str.match(tldMatcher) || [])[0];