Javascript trim 多行字符串不切词

Javascript trim multiline string without cutting words

我正在寻找 trim 一个字符串到一定长度的字符而不切割单词的答案。我搜索了这些问题,发现了这个:

javascript shorten string without cutting words

我想将@Hamish 的回答与正则表达式替换一起使用,但遇到多行文本问题。

@Hamish 的回答:

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

我搜索了类似的问题,发现点 '.'不包括换行符 \n。通常可以在末尾结束 's' 以使点也匹配换行符,但在 javascript 中这显然不起作用。 我在其他线程中读到我应该使用 [\s\S] 来匹配任何字符。 所以我尝试像这样使用@Hamish 的正则表达式:

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

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

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

有人可以帮我解决这个问题吗?我真的找不到匹配任何角色的解决方案...... 提前致谢。 M

你可以试试:

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

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

JSFiddle

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

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

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

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

这包括 9 个任意类型的字符,如果第 10 个是空格,则正则表达式将在它之后停止,如果它不是空格,它将包含该单词的其余部分,直到下一个空格,这样它就不会被剪切。

jsfiddle | regex101:

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

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*).*/, "");
console.log(infotext); //this is a longish