получить фрагмент текста с использованием JavaScript? - PullRequest
0 голосов
/ 24 августа 2011

У меня длинный текст. например:

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

Как написать метод для получения фрагмента, а не подстроки:

Пример: фрагмент (текст, 10) -> "получить фрагмент ...", а не "получить фрагмент" (10 символов). это означает, что если последний символ не является пробелом или точкой, мы должны получить больше символов, пока не достигнем пробела или точки.

Любая помощь?

Ответы [ 6 ]

2 голосов
/ 24 августа 2011

Тщательно не проверено:

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

Вы можете добавить многоточие, когда возвращаемая строка короче, чем исходная строка.

2 голосов
/ 24 августа 2011

Вы можете использовать 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";
2 голосов
/ 24 августа 2011
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
1 голос
/ 02 мая 2016

Прототип рифа на ответ программиста:

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);
0 голосов
/ 24 августа 2011

фрагмент функции (str, len) {newStr = str.substring (0, len); var i = len;while (str [i]! = '& & str [i]! ='. ') newStr + = str [i ++];return newStr + "...";
}

0 голосов
/ 24 августа 2011

Не уверен, что полностью понимаю ваш вопрос, но я думаю, что в этом случае можно использовать регулярное выражение:

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

возвращает

"get snippets"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...