जावास्क्रिप्ट में शब्दों को काटने के बिना छोटा स्ट्रिंग


102

मैं जावास्क्रिप्ट में स्ट्रिंग हेरफेर के साथ बहुत अच्छा नहीं हूं, और मैं सोच रहा था कि आप किसी भी शब्द को काटे बिना एक स्ट्रिंग को छोटा करने के बारे में कैसे जाएंगे। मुझे पता है कि सबस्ट्रिंग का उपयोग कैसे करें, लेकिन इंडेक्सऑफ या कुछ भी नहीं।

कहो मैं निम्नलिखित स्ट्रिंग था:

text = "this is a long string I cant display"

मैं इसे 10 अक्षरों तक ट्रिम करना चाहता हूं, लेकिन यदि यह किसी स्थान के साथ समाप्त नहीं होता है, तो शब्द समाप्त करें। मैं स्ट्रिंग चर को इस तरह नहीं देखना चाहता:

"यह एक लंबी स्ट्रिंग है जो मुझे पसंद नहीं है"

मैं चाहता हूं कि जब तक कोई स्थान न हो तब तक शब्द को खत्म करें।


आप एक स्ट्रिंग ट्रिम मतलब है? कोशिश" too many spaces ".trim()
अनुराग

1
कुछ उदाहरण इनपुट और अपेक्षित आउटपुट से इस प्रश्न का उत्तर देने में बहुत मदद मिलेगी।
deceze

ठीक है माफ करना, मैं स्ट्रिंग पाठ था = "यह एक लंबी स्ट्रिंग है जो मैं नहीं दिखा सकता" यह "यह एक लंबी स्ट्रिंग है जो मुझे पसंद नहीं है"
जोश बेदो

जवाबों:


180

अगर मैं सही तरीके से समझूं, तो आप एक स्ट्रिंग को एक निश्चित लंबाई (जैसे "The quick brown fox jumps over the lazy dog"किसी भी शब्द को काटे बिना, 6 वर्णों को छोटा , कहना चाहते हैं) को छोटा करना चाहते हैं ।

यदि यह मामला है, तो आप कुछ इस तरह की कोशिश कर सकते हैं:

var yourString = "The quick brown fox jumps over the lazy dog"; //replace with your string.
var maxLength = 6 // maximum number of characters to extract

//Trim and re-trim only when necessary (prevent re-trim when string is shorted than maxLength, it causes last word cut) 
if(yourString.length > trimmedString.length){
    //trim the string to the maximum length
    var trimmedString = yourString.substr(0, maxLength);

    //re-trim if we are in the middle of a word and 
    trimmedString = trimmedString.substr(0, Math.min(trimmedString.length, trimmedString.lastIndexOf(" ")))
}

9
@ जोश बिल्कुल सही नहीं है कि ".replace" "jQuery फ़ंक्शंस" में काम नहीं करता है। "JQuery फ़ंक्शन" जैसी कोई चीज़ भी नहीं है।
प्वांइट

3
ऐसा नहीं होना चाहिए "अधिकतम गति 1"। और यदि अधिकतम वाक्य पूर्ण वाक्य की लंबाई से अधिक या बराबर है, तो अंतिम शब्द शामिल नहीं है। लेकिन समाधान के लिए धन्यवाद।
बेयटन कर्ट

4
यदि इसे एक स्ट्रिंग पर उपयोग किया जा रहा है जो अधिकतम गति से कम है, तो अंतिम शब्द कट जाता है। शायद @AndrewJuniorHoward ने पहले ही इसके लिए फिक्स ( maxLength + 1) कहा था , लेकिन मैंने इसे केवल इस लाइन को ऊपर जोड़कर तय किया:var yourString += " ";
tylerl

3
दुर्भाग्य से, यदि आप fox jumps over the lazy dogभाग लेते हैं , तो परिणाम तब होगा The quick brown , जब यह होना चाहिए The quick brown fox
एंड्री गोर्डीव

2
यह हमेशा अंतिम शब्द काटता है।
क्रिस सिनेली

108

इसे करने के बहुत सारे तरीके हैं, लेकिन एक नियमित अभिव्यक्ति एक उपयोगी एक पंक्ति विधि है:

"this is a longish string of text".replace(/^(.{11}[^\s]*).*/, "$1"); 
//"this is a longish"

यह भाव पहले 11 (किसी भी) वर्ण और बाद के किसी भी गैर-अंतरिक्ष वर्ण देता है।

उदाहरण लिपि:

<pre>
<script>
var t = "this is a longish string of text";

document.write("1:   " + t.replace(/^(.{1}[^\s]*).*/, "$1") + "\n");
document.write("2:   " + t.replace(/^(.{2}[^\s]*).*/, "$1") + "\n");
document.write("5:   " + t.replace(/^(.{5}[^\s]*).*/, "$1") + "\n");
document.write("11:  " + t.replace(/^(.{11}[^\s]*).*/, "$1") + "\n");
document.write("20:  " + t.replace(/^(.{20}[^\s]*).*/, "$1") + "\n");
document.write("100: " + t.replace(/^(.{100}[^\s]*).*/, "$1") + "\n");
</script>

आउटपुट:

1:   this
2:   this
5:   this is
11:  this is a longish
20:  this is a longish string
100: this is a longish string of text

बहुत बढ़िया, मैंने शाब्दिक रूप से इस सवाल को एक लाख तरीके से देखा और केवल php के लिए एक कामकाजी संस्करण खोजा और इसके लिए कुछ भी शामिल नहीं किया।
जोश बेदो

1
यह पहली (और केवल, इस मामले में) उप अभिव्यक्ति मैच की बात कर रहा है - कोष्ठक में सामान। $ 0 पूरे मैच को संदर्भित करेगा, जो इस मामले में संपूर्ण स्ट्रिंग है।
हामिश

3
@ जोश आप एक regexp ऑब्जेक्ट का उपयोग करके अधिकतम लंबाई को एक चर बनाने में सक्षम होना चाहिए:t.replace(new RegExp("^(.{"+length+"}[^\s]*).*"), "$1")
rjmackay

1
@ अपने विकल्प को अच्छी तरह से काम करता है, लेकिन यह अंतिम शब्द भी शामिल है अगर लंबाई से अधिक है। मैंने अंतिम शब्द को बाहर करने के लिए रेगेक्स एक्सप्रेशन को बदलने की कोशिश की अगर अधिकतम शब्द सीमा पार हो गई है, लेकिन यह काम नहीं कर रहा है। हम इसे कैसे प्राप्त कर सकते हैं?
शशांक अग्रवाल

1
ठीक है, यह वास्तव में सही ढंग से काम नहीं कर रहा है, कभी-कभी मैं अधिकतम मूल्य को उदाहरण के लिए पास करता हूं यदि अंतिम शब्द 30 वर्ण पहले से ही था, तो यह पहले से ही 60 से अधिक लंबाई के साथ होगा! यहां तक ​​कि अगर यह लंबाई निर्धारित करता है{30}
अल-मोताफ़र

65

मुझे आश्चर्य है कि इस तरह की एक साधारण समस्या के लिए बहुत सारे जवाब हैं जिन्हें पढ़ना मुश्किल है और कुछ, जिनमें चुने हुए एक भी शामिल हैं, काम नहीं करते हैं।

मैं आमतौर पर परिणाम स्ट्रिंग को अधिकांश maxLen वर्णों पर रखना चाहता हूं । मैं URL में स्लग को छोटा करने के लिए इसी फ़ंक्शन का उपयोग करता हूं।

str.lastIndexOf(searchValue[, fromIndex]) एक दूसरा पैरामीटर लेता है जो सूचकांक है जिस पर स्ट्रिंग को पीछे की ओर खोजना शुरू करना है जो चीजों को कुशल और सरल बनाता है।

// Shorten a string to less than maxLen characters without truncating words.
function shorten(str, maxLen, separator = ' ') {
  if (str.length <= maxLen) return str;
  return str.substr(0, str.lastIndexOf(separator, maxLen));
}

यह एक नमूना आउटपुट है:

for (var i = 0; i < 50; i += 3) 
  console.log(i, shorten("The quick brown fox jumps over the lazy dog", i));

 0 ""
 3 "The"
 6 "The"
 9 "The quick"
12 "The quick"
15 "The quick brown"
18 "The quick brown"
21 "The quick brown fox"
24 "The quick brown fox"
27 "The quick brown fox jumps"
30 "The quick brown fox jumps over"
33 "The quick brown fox jumps over"
36 "The quick brown fox jumps over the"
39 "The quick brown fox jumps over the lazy"
42 "The quick brown fox jumps over the lazy"
45 "The quick brown fox jumps over the lazy dog"
48 "The quick brown fox jumps over the lazy dog"

और स्लग के लिए:

for (var i = 0; i < 50; i += 10) 
  console.log(i, shorten("the-quick-brown-fox-jumps-over-the-lazy-dog", i, '-'));

 0 ""
10 "the-quick"
20 "the-quick-brown-fox"
30 "the-quick-brown-fox-jumps-over"
40 "the-quick-brown-fox-jumps-over-the-lazy"

1
मैं lastIndexOf () के बारे में पूरी तरह से भूल गया। अच्छी पकड़!
टिक्की

2
यह किसी कारण strसे दुर्घटनाग्रस्त हो जाता है undefined। मैंने जोड़ाif (!str || str.length <= maxLen) return str;
सिल्वेन

यह किनारे के मामले को नहीं संभालता है जहां विभाजक स्ट्रिंग में नहीं होता है
shrewquest

@shrewquest यह काम करता है। यदि विभाजक स्ट्रिंग में नहीं है, तो यह स्ट्रिंग को वापस लौटाता है यदि str.length <= maxLen। अन्यथा यह एक खाली स्ट्रिंग लौटाता है।
क्रिस सिनेली

20

हर कोई यह भूल जाता है कि indexOf दो तर्क लेता है- मैच करने के लिए स्ट्रिंग, और वर्ण सूचकांक से देखना शुरू करना। आप 10 वर्णों के बाद पहले स्थान पर स्ट्रिंग को तोड़ सकते हैं।

function cutString(s, n){
    var cut= s.indexOf(' ', n);
    if(cut== -1) return s;
    return s.substring(0, cut)
}
var s= "this is a long string i cant display";
cutString(s, 10)

/*  returned value: (String)
this is a long
*/

ध्यान दें कि यदि कठिन सीमाओं की आवश्यकता है, तो indexOf को lastIndexOf द्वारा प्रतिस्थापित किया जा सकता है।
शीहिन्तोड

14

लोदाश के पास इसके लिए विशेष रूप से लिखा गया एक फंक्शन है: _.truncate

const truncate = _.truncate
const str = 'The quick brown fox jumps over the lazy dog'

truncate(str, {
  length: 30, // maximum 30 characters
  separator: /,?\.* +/ // separate by spaces, including preceding commas and periods
})

// 'The quick brown fox jumps...'

7

NT3RP उत्तर के आधार पर जो कुछ कोने के मामलों को नहीं संभालता है, मैंने यह कोड बना लिया है। यह एक आकार के साथ पाठ को वापस नहीं करने की गारंटी देता है> अधिकतम गति घटना ...के अंत में एक दीर्घवृत्त जोड़ा गया था।

यह एक पाठ की तरह कुछ कोने के मामलों को भी संभालता है जिसमें एक ही शब्द है> अधिकतम गति

shorten: function(text,maxLength,options) {
    if ( text.length <= maxLength ) {
        return text;
    }
    if ( !options ) options = {};
    var defaultOptions = {
        // By default we add an ellipsis at the end
        suffix: true,
        suffixString: " ...",
        // By default we preserve word boundaries
        preserveWordBoundaries: true,
        wordSeparator: " "
    };
    $.extend(options, defaultOptions);
    // Compute suffix to use (eventually add an ellipsis)
    var suffix = "";
    if ( text.length > maxLength && options.suffix) {
        suffix = options.suffixString;
    }

    // Compute the index at which we have to cut the text
    var maxTextLength = maxLength - suffix.length;
    var cutIndex;
    if ( options.preserveWordBoundaries ) {
        // We use +1 because the extra char is either a space or will be cut anyway
        // This permits to avoid removing an extra word when there's a space at the maxTextLength index
        var lastWordSeparatorIndex = text.lastIndexOf(options.wordSeparator, maxTextLength+1);
        // We include 0 because if have a "very long first word" (size > maxLength), we still don't want to cut it
        // But just display "...". But in this case the user should probably use preserveWordBoundaries:false...
        cutIndex = lastWordSeparatorIndex > 0 ? lastWordSeparatorIndex : maxTextLength;
    } else {
        cutIndex = maxTextLength;
    }

    var newText = text.substr(0,cutIndex);
    return newText + suffix;
}

मुझे लगता है कि आप आसानी से jquery निर्भरता को हटा सकते हैं अगर यह आपको परेशान करता है।


3
मैं इस समाधान को पसंद करता हूं, लेकिन क्या आर्गल्स को $.extendउलट कर पारित नहीं किया जाना चाहिए ?
JKesMc9tqIQe9M

6

यहाँ एक पंक्ति में एक समाधान है।

text = "this is a long string I cant display"

function shorten(text,max) {
    return text && text.length > max ? text.slice(0,max).split(' ').slice(0, -1).join(' ') : text
}


console.log(shorten(text,10));


3

मुझे पार्टी में देर हो रही है, लेकिन यहाँ एक छोटा और आसान समाधान है जो मैं कुछ शब्दों की वापसी के लिए आया था।

यह आपके पात्रों की आवश्यकता से सीधे संबंधित नहीं है , लेकिन यह उसी परिणाम को प्रस्तुत करता है जो मुझे विश्वास है कि आप बाद में थे।

function truncateWords(sentence, amount, tail) {
  const words = sentence.split(' ');

  if (amount >= words.length) {
    return sentence;
  }

  const truncated = words.slice(0, amount);
  return `${truncated.join(' ')}${tail}`;
}

const sentence = 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.';

console.log(truncateWords(sentence, 10, '...'));

कार्य का उदाहरण यहाँ देखें: https://jsfiddle.net/bx7rojgL/


आपने एक JS फ़ंक्शन लिखा है जो स्ट्रिंग को कई शब्दों में विभाजित करता है। प्रश्न फिर से पढ़ें।
क्रिस्टोकिवी

1
eeehm। मुझे लगता है कि यह प्रश्न का एकमात्र सही उत्तर है। उसने बिना शब्द काटे पूछा।
माइक एरोन

2

इसमें शामिल करने के बजाय अंतिम शब्द को शामिल नहीं किया गया है।

function smartTrim(str, length, delim, appendix) {
    if (str.length <= length) return str;

    var trimmedStr = str.substr(0, length+delim.length);

    var lastDelimIndex = trimmedStr.lastIndexOf(delim);
    if (lastDelimIndex >= 0) trimmedStr = trimmedStr.substr(0, lastDelimIndex);

    if (trimmedStr) trimmedStr += appendix;
    return trimmedStr;
}

उपयोग:

smartTrim(yourString, 11, ' ', ' ...')
"The quick ..."

2

मैंने एक अलग तरीका अपनाया। जबकि मुझे इसी तरह के परिणाम की आवश्यकता थी, मैं अपने रिटर्न मूल्य को निर्दिष्ट लंबाई से कम रखना चाहता था।

function wordTrim(value, length, overflowSuffix) {
    value = value.trim();
    if (value.length <= length) return value;
    var strAry = value.split(' ');
    var retString = strAry[0];
    for (var i = 1; i < strAry.length; i++) {
        if (retString.length >= length || retString.length + strAry[i].length + 1 > length) break;
        retString += " " + strAry[i];
    }
    return retString + (overflowSuffix || '');
}

संपादित करें मैंने इसे यहां थोड़ा सा दर्शाया : JSFiddle उदाहरण । यह समाप्‍त करने के बजाय मूल सरणी से जुड़ता है।

function wordTrim(value, length, overflowSuffix) {
    if (value.length <= length) return value;
    var strAry = value.split(' ');
    var retLen = strAry[0].length;
    for (var i = 1; i < strAry.length; i++) {
        if(retLen == length || retLen + strAry[i].length + 1 > length) break;
        retLen+= strAry[i].length + 1
    }
    return strAry.slice(0,i).join(' ') + (overflowSuffix || '');
}

2
function shorten(str,n) {
  return (str.match(RegExp(".{"+n+"}\\S*"))||[str])[0];
}

shorten("Hello World", 3); // "Hello"



1
shorten(str, maxLen, appendix, separator = ' ') {
if (str.length <= maxLen) return str;
let strNope = str.substr(0, str.lastIndexOf(separator, maxLen));
return (strNope += appendix);

}

var s = "यह एक लंबी स्ट्रिंग है और मैं सभी को समझा नहीं सकता"; छोटा (s, 10, '...')

/* "ये है .." */


1

यहाँ कोड का एक और टुकड़ा है जो विराम चिह्नों के साथ घूमता है (इसे खोज रहा था और Google को यह प्रश्न यहाँ मिला)। अपने दम पर एक समाधान के साथ आना था, इसलिए यह वह है जो मैंने 15 मिनट में हैक किया था। के सभी घटनाओं को ढूँढता है। ! ? और इनमें से किसी भी स्थिति में यह है कि <से truncateslen

function pos(str, char) {
    let pos = 0
    const ret = []
    while ( (pos = str.indexOf(char, pos + 1)) != -1) {
        ret.push(pos)
    }
    return ret
}

function truncate(str, len) {
    if (str.length < len)
        return str

    const allPos = [  ...pos(str, '!'), ...pos(str, '.'), ...pos(str, '?')].sort( (a,b) => a-b )
    if (allPos.length === 0) {
        return str.substr(0, len)
    }

    for(let i = 0; i < allPos.length; i++) {
        if (allPos[i] > len) {
            return str.substr(0, allPos[i-1] + 1)
        }
    }
}

module.exports = truncate

1

टाइपस्क्रिप्ट, और दीर्घवृत्त के साथ :)

export const sliceByWord = (phrase: string, length: number, skipEllipses?: boolean): string => {
  if (phrase.length < length) return phrase
  else {
    let trimmed = phrase.slice(0, length)
    trimmed = trimmed.slice(0, Math.min(trimmed.length, trimmed.lastIndexOf(' ')))
    return skipEllipses ? trimmed : trimmed + '…'
  }
}

1

'टमाटर और पालक के साथ पास्ता'

यदि आप शब्द को आधे में नहीं काटना चाहते हैं

पहला पुनरावृत्ति:

acc: 0 / acc + cur.length = 5 / newTitle = ['पास्ता'];

दूसरा पुनरावृत्ति:

acc: 5 / acc + cur.length = 9 / newTitle = ['पास्ता', 'साथ'];

तीसरा पुनरावृत्ति:

acc: 9 / acc + cur.length = 15 / newTitle = ['पास्ता', 'साथ', 'टमाटर'];

चौथा पुनरावृत्ति:

acc: 15 / acc + cur.length = 18 (सीमा बाध्य) / newTitle = ['पास्ता', 'साथ', 'टमाटर'];

const limitRecipeTitle = (title, limit=17)=>{
    const newTitle = [];
    if(title.length>limit){
        title.split(' ').reduce((acc, cur)=>{
            if(acc+cur.length <= limit){
                newTitle.push(cur);
            }
            return acc+cur.length;
        },0);
    }

    return `${newTitle.join(' ')} ...`
}

उत्पादन: टमाटर के साथ पास्ता ...


यह 'जॉइन (' ') वर्णों के लिए जिम्मेदार नहीं है, जो स्ट्रिंग को सीमा से अधिक लंबा कर सकता है। यदि आप कम () के फंक्शन को (एसीसी, कर्व, आईडीएक्स) में बदल देते हैं और यदि को (एसीसी + क्यूरलिटी <= सीमा - आईडीएक्स) को देखते हैं, तो यह अतिरिक्त रिक्त स्थान के लिए जिम्मेदार होगा, जब शब्द एक साथ जुड़ जाते हैं। यदि कड़ाई से सीमा के भीतर होना आवश्यक है।
PSaul

0

इसके लायक क्या है, मैंने इसे स्ट्रिंग के अंत में विराम चिह्न या व्हाट्सएप छोड़ने के बिना शब्द सीमा को छोटा करने के लिए लिखा है:

function truncateStringToWord(str, length, addEllipsis)
{
    if(str.length <= length)
    {
        // provided string already short enough
        return(str);
    }

    // cut string down but keep 1 extra character so we can check if a non-word character exists beyond the boundary
    str = str.substr(0, length+1);

    // cut any non-whitespace characters off the end of the string
    if (/[^\s]+$/.test(str))
    {
        str = str.replace(/[^\s]+$/, "");
    }

    // cut any remaining non-word characters
    str = str.replace(/[^\w]+$/, "");

    var ellipsis = addEllipsis && str.length > 0 ? '&hellip;' : '';

    return(str + ellipsis);
}

var testString = "hi stack overflow, how are you? Spare";
var i = testString.length;

document.write('<strong>Without ellipsis:</strong><br>');

while(i > 0)
{
  document.write(i+': "'+ truncateStringToWord(testString, i) +'"<br>');
  i--;
}

document.write('<strong>With ellipsis:</strong><br>');

i = testString.length;
while(i > 0)
{
  document.write(i+': "'+ truncateStringToWord(testString, i, true) +'"<br>');
  i--;
}


0

मतदान के समाधान को संतोषजनक नहीं पाया। इसलिए मैंने कुछ लिखा है कि जेनेरिक एक तरह का है और आपके टेक्स्ट के पहले और आखिरी हिस्से में काम करता है (कुछ ऐसा ही है, लेकिन शब्दों के लिए)। यदि आप रिक्त स्थान को चार-गिनती में छोड़ना चाहते हैं, तो भी आप सेट कर सकते हैं।

    function chopTxtMinMax(txt, firstChar, lastChar=0){
        var wordsArr = txt.split(" ");
        var newWordsArr = [];

        var totalIteratedChars = 0;
        var inclSpacesCount = true;

        for(var wordIndx in wordsArr){
            totalIteratedChars += wordsArr[wordIndx].length + (inclSpacesCount ? 1 : 0);
            if(totalIteratedChars >= firstChar && (totalIteratedChars <= lastChar || lastChar==0)){
                newWordsArr.push(wordsArr[wordIndx]);
            }
        }

        txt = newWordsArr.join(" ");
        return txt;
    }

0

मैं इसके लिए देर से आया था लेकिन मुझे लगता है कि यह फ़ंक्शन ठीक वही करता है जो ओपी अनुरोध करता है। आप आसानी से विभिन्न परिणामों के लिए SENTENCE और LIMIT मान बदल सकते हैं।

function breakSentence(word, limit) {
  const queue = word.split(' ');
  const list = [];

  while (queue.length) {
    const word = queue.shift();

    if (word.length >= limit) {
      list.push(word)
    }
    else {
      let words = word;

      while (true) {
        if (!queue.length ||
            words.length > limit ||
            words.length + queue[0].length + 1 > limit) {
          break;
        }

        words += ' ' + queue.shift();
      }

      list.push(words);
    }
  }

  return list;
}

const SENTENCE = 'the quick brown fox jumped over the lazy dog';
const LIMIT = 11;

// get result
const words = breakSentence(SENTENCE, LIMIT);

// transform the string so the result is easier to understand
const wordsWithLengths = words.map((item) => {
  return `[${item}] has a length of - ${item.length}`;
});

console.log(wordsWithLengths);

इस स्निपेट का उत्पादन वह स्थान है जहां लिमिट 11 है:

[ '[the quick] has a length of - 9',
  '[brown fox] has a length of - 9',
  '[jumped over] has a length of - 11',
  '[the lazy] has a length of - 8',
  '[dog] has a length of - 3' ]

0

खाली वाक्य और बहुत पहले शब्द जैसे सीमा स्थितियों के साथ। इसके अलावा, यह कोई भाषा विशिष्ट स्ट्रिंग एपीआई / पुस्तकालय का उपयोग नहीं करता है।

function solution(message, k) {
    if(!message){
        return ""; //when message is empty
    }
    const messageWords = message.split(" ");
    let result = messageWords[0];
    if(result.length>k){
        return ""; //when length of first word itself is greater that k
    }
    for(let i = 1; i<messageWords.length; i++){
        let next = result + " " + messageWords[i];

        if(next.length<=k){
            result = next;
        }else{
            break;
        }
    }
    return result;
}

console.log(solution("this is a long string i cant display", 10));


-1

आप इसके साथ रिक्त स्थान ट्रिम कर सकते हैं:

var trimmedString = flabbyString.replace(/^\s*(.*)\s*$/, '$1');

-1

@ NT3RP से अद्यतित मैंने पाया कि यदि स्ट्रिंग पहली बार किसी स्थान को हिट करने के लिए होती है, तो वह उस शब्द को हटा देगा जो आपके स्ट्रिंग को एक शब्द से भी छोटा बना देगा। तो मैं सिर्फ एक if वक्तव्य में फेंक दिया कि जाँच करने के लिए कि maxLength एक स्थान पर नहीं पड़ता है।

codepen.io

var yourString = "The quick brown fox jumps over the lazy dog"; //replace with your string.
var maxLength = 15 // maximum number of characters to extract

if (yourString[maxLength] !== " ") {

//trim the string to the maximum length
var trimmedString = yourString.substr(0, maxLength);

alert(trimmedString)

//re-trim if we are in the middle of a word
trimmedString = trimmedString.substr(0, Math.min(trimmedString.length, trimmedString.lastIndexOf(" ")))
}

else {
  var trimmedString = yourString.substr(0, maxLength);
}

alert(trimmedString)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.