2012-11-24 41 views
0

恐怕对用户输入字符串的match进行细化将导致错误,因为matchg标志设置的正则表达式不匹配字符串将返回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);如果(匹配)tld = matches [0]'会更好。 –

+2

不要调用'match'两次。调用一次,存储结果,如果不是null,则提取您感兴趣的元素。 – Lee

回答

1

我个人使用|| []当我使用.matchg。即:

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

这确保matches将始终是一个字符串数组(但可能为空)。在你的情况下,它可以这样做:

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