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}
您可能正在寻找的正则表达式是
/^([\s\S]{9}((?=\s)\s|[^\s]*)).*/i
在你的情况下,你必须将你的行更改为此
infotext = infotext.replace(/^([\s\S]{9}((?=\s)\s|[^\s]*)).*/i, "");
这包括 9 个任意类型的字符,如果第 10 个是空格,则正则表达式将在它之后停止,如果它不是空格,它将包含该单词的其余部分,直到下一个空格,这样它就不会被剪切。
我只能建议您访问 regex101.com 并使用一些正则表达式进行测试以掌握它。
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
我正在寻找 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}
您可能正在寻找的正则表达式是
/^([\s\S]{9}((?=\s)\s|[^\s]*)).*/i
在你的情况下,你必须将你的行更改为此
infotext = infotext.replace(/^([\s\S]{9}((?=\s)\s|[^\s]*)).*/i, "");
这包括 9 个任意类型的字符,如果第 10 个是空格,则正则表达式将在它之后停止,如果它不是空格,它将包含该单词的其余部分,直到下一个空格,这样它就不会被剪切。
我只能建议您访问 regex101.com 并使用一些正则表达式进行测试以掌握它。
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