2013-01-10 41 views
0

鉴于的Javascript分裂后20个字符

string = 'Stackoverflow is awesome. It answers all my questions'; 
string = 'Stackoverflow. Q and A site'; 

我可以搞定一切之前string.split('.')[0];

句号,但我只是想这样做,如果句号一定数目的字符否则返回后出现全面停止前的一切。

我正确地需要一个正则表达式来做到这一点,但我不知道如何。

+0

您_could_使用正则表达式,但也绝对没有必要的。 – jahroy

回答

1

没有必要对一个正则表达式。

你可以只是这样做:

function trimToDot(s) { 
    var head = s.split('.')[0]; 
    return (head.length > 20) ? head : s; 
} 
+0

好的。我改变主意了。如果regex不匹配,另一个答案返回一个null值的数组。这意味着我将不得不处理这个问题。这打击了我整个较短的代码想法。你的函数为我处理这个。 – jamjam

+0

我会很快同意检查null是没有趣味的! – jahroy

4

/^.{20,}?\./应该这样做。 ^告诉它开始查找搜索字符串的开头,第一个.意味着匹配任何字符,{20,}是一个量词,意思是“至少20”,而?使匹配尽可能少(否则它会将所有内容返回到最后一个点)。最后,\.匹配一个文字点。

+0

你可以请详细说明一下,这是使用拆分方法吗? – jamjam

+0

使用'match'。第一个返回值将是一个包含单个元素的数组,它是您正在查找的子字符串。 –

+0

很酷的作品。谢谢。 – jamjam

1

最简单的方法应该是

var result = string.split('.')[0].length > 20 ? string.split('.')[0] : string; 
+0

这比使用正则表达式更好(尽管这两种方法都可行)。 – jahroy

+0

即使如此,我更喜欢正则表达式,因为它更短。我使用节点,因此性能不像在浏览器中那么大。 – jamjam

+0

@jamjam - 这是你的选择,但我从来没有理解为什么很多人认为较短的代码比可读的代码更好。 – jahroy