2017-06-14 53 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。

相关问题