2017-06-14 51 views
2

我有一些字符串逐一進來。如果它們的長度超過15個字符,我想在15個字符之後切分所有內容,但在檢測到空白區域之前(以保持可讀性)。如果檢測到空白,我該如何分割一個字符串?

我的邏輯是目前這些方針的東西:

   const text = "Microsoft Server 2012 R2"; // text.length = 24 
       let newStr = ''; 
       if(text.length > 15){ // true 
        newStr = text.slice(0, 15) 
       } 
       console.log(newStr); 
       // Desired output: "Microsoft Server 
       // Current output: "Microsoft Serve" 
+0

'split'返回一個我認爲不是你想要的數組 –

+0

所以如果第15個字符在單詞內部,你想保留整個單詞或刪除整個單詞? – Luke

+0

@MasterYushi你是對的,它是切片。我正在測試一些東西,對不起。 – cbll

回答

4

您可以使用此正則表達式替換,讓您的工作做好。這會在輸入中的前15個字符後匹配0個或多個非空白字符。

var s = 'Microsoft Server 2012 R2' 
 
var r = s.replace(/^(.{15}\S*).*$/, '$1') 
 

 
console.log(r) 
 
//=> Microsoft Server

RegEx Demo

+0

'replace'更有效率,它是通過'RegExp'完成相同的邏輯,然後得到第一個組?或者僅僅是爲了簡短 – AxelH

+1

這只是爲了簡短@AxelH。我們可以執行'exec'或'match'並獲取匹配的字符串。 – anubhava

1

您可能匹配任何第一15個字符與[^]{15}/[\s\S]{15},然後用\S*匹配0或多個非空白字符:

const text = "Microsoft Server 2012 R2"; 
 
let newStr = (m=text.match(/^[^]{15}\S*/)) ? m[0] : ""; 
 
console.log(newStr);

注意.匹配任何字符其他比換行符字符,這就是爲什麼我建議[^](非無)或它的便攜相當於[\s\S]/[\d\D]/[\w\W]

1

你可以匹配首先想要的字母,並採取字符,直到找到一個空格。

var string = "Microsoft Server 2012 R2", 
 
    short = string.match(/^.{15}[^ ]*/)[0]; 
 
    
 
console.log(short);

1
function hasWhiteSpace(SubText) { 
    return /\s/g.test(SubText); 
} 

調用此函數和子串,即潛臺詞是文本,直到15個charactors的子檢查的空白。因此如果該子字符串包含空格,則會得到一個值。該功能還將測試TABs Present。

相關問題