2011-08-24 46 views
0

我有一個長文本。例如:使用JavaScript獲取片段文本?

var text = "get snippet text using javascript?"; 

我怎麼能寫一個方法來獲得片段,不串:

例:片段(文字,10) - > 「獲得片段......」 而不是 「讓snippe」( 10個字符)。這意味着如果最後一個字符不是空格或點,我們必須獲得更多字符,直到到達空格或點。

任何幫助?

回答

2

不徹底的測試:

function getSnippet(text, length) { 
    var rx = new RegExp("^.{" + length + "}[^ ]*"); 
    return rx.exec(text)[0]; 
} 
console.log(getSnippet("get snippet text using javascript?", 1)); // get 
console.log(getSnippet("get snippet text using javascript?", 3)); // get 
console.log(getSnippet("get snippet text using javascript?", 10)); // get snippet 
console.log(getSnippet("get snippet text using javascript?", 11)); // get snippet 

時返回的字符串比原字符串短,您可以添加省略號。

+0

已測試,很好! – vNext

+0

這很好,但是請注意,如果字符串包含'\ n',比如'get \ nsnippet text', –

2
function intelligentlyTruncate(text, threshhold) 
{  
    for(var i = threshhold; i < text.length; i++) 
    { 
     if(/^\s/.test(text.substr(i, 1))) 
      return text.substr(0, i); // + '...' if you want the elipsis. 
    } 
    return text; 
} 

console.log(intelligentlyTruncate("get snippet text using javascript?", 5)); 
// get snippet 

如果你想有一個最大的,而不是一個最小的(所以它決不會大於給定的值):

function intelligentlyTruncate(text, threshhold) 
{  
    for(var i = threshhold - 1; i >= 0; i--) 
    { 
     if(/^\s/.test(text.substr(i, 1))) 
      return text.substr(0, i); // + '...' if you want the elipsis. 
    } 
    return text; 
} 


console.log(intelligentlyTruncate("get snippet text using javascript?", 5)); 
// get 
0

不知道我完全理解你的問題,但我猜正則表達式可以在這種情況下使用:

text.match(/^(\S+ [^ .]+)/)[1] 

返回

"get snippets" 
+0

失蹤長度參數 – vNext

0

函數代碼片段(str,len){ newStr = str.substring(0,len); var i = len; newStr + = str [i ++];(str [i]!='' return newStr +「...」;
}

2

您可以使用indexOf並指定起點來查找下一個空格。

var text = "get snipped text using javascript?"; 
    function getComplete(str, len) { 
     if (str.length > len) { 
      var i = str.indexOf(" ", len); 
      return str.substring(0, i); 
     } 
     return str; 
    } 
getComplete(text, 10) // "get snipped"; 
+0

如果text.length < len ->錯誤! – vNext

+0

編輯爲了防範長度錯誤,謝謝。 – theprogrammer

1

原型即興的theprogrammer的回答是:

String.prototype.getComplete = function(len) { 
    var str = this; 
    if (str.length > len) { 
     var i = str.indexOf(" ", len); 
     return str.substring(0, i); 
    } 
    return str; 
} 

//Usage 
mystr = mystr.getComplete(500);