Javascript修剪多行字符串而不切割单词

时间:2015-03-15 09:51:56

标签: javascript regex string trim cut

我正在寻找一个答案,将字符串修剪为一定长度的字符,而不会削减字数。我搜索了这些问题,发现了这个:

javascript shorten string without cutting words

我想在正则表达式替换时使用@Hamish的答案,但遇到了多行文本的问题。

@Hamish的回答:

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

我搜索了类似的问题,发现了点'。'不包括换行符\ n。通常情况下,人们可能会结束这样的事情。最后让点也匹配换行符,但在javascript中显然不起作用。 我在其他帖子中读到我应该使用[\ s \ S]匹配任何字符。 所以我尝试使用@Hamish的正则表达式,如下所示:

infotext = infotext.replace(/^([\s\S]*{10}[^\s]*).*/, "$1");

但后来我收到一条错误消息:

Uncaught SyntaxError: 
Invalid regular expression: /^(\[\s\S\]*{10}[^\s]*).*/: Nothing to repeat.

有人可以帮我解决这个问题。我真的找不到匹配任何角色的解决方案...... Thx提前。 中号

3 个答案:

答案 0 :(得分:2)

您可以尝试:

infotext = infotext.replace(/^([\s\S]{10}\S*)[\s\S]*/, "$1");

问题在于您使用[\s\S]*{10}

JSFiddle

答案 1 :(得分:2)

jsfiddle demo

infotext="this is a longish string of test.\n bla bla bla bla text here";
infotext = infotext.match(/^.*$/m)[0].replace(/^([\s\S]{10}\S*).*/, "$1");
console.log(infotext); //this is a longish

答案 2 :(得分:1)

你可能正在寻找的正则表达式是

/^([\s\S]{9}((?=\s)\s|[^\s]*)).*/i

在您的情况下,您必须将您的行更改为此

infotext = infotext.replace(/^([\s\S]{9}((?=\s)\s|[^\s]*)).*/i, "$1");

这包括任何类型的9个字符,如果第10个是空格,那么正则表达式将在它之后停止,如果它没有空格,它将包括该单词的其余部分,直到下一个空格,所以它赢得了#t被削减。

jsfiddle | regex101

我只能建议您访问regex101.com并使用一些正则表达式来测试它。