reactjs - 在反应中显示一个字符串
问题描述
我有一个如下所示的字符串,我想在特定字符限制后截断它并显示一个省略号。
"This is a long string"
在截断时,我希望字符串显示如下内容:
This is a long (...)
or
This is a (...)
or
This is (...)
上面的例子没有删减的话。我不想要的是:
This is a lon (...)
or
This is a long s (...)
上面的例子不起作用。
我正在使用以下函数来截断字符串。该功能的问题在于它有时会截断单词。我使用的长度值是 175。对于 175 个字符的限制,有时它会削减单词,有时它不会。
export const wordsTruncate = (words, length) => {
const j = words.split('');
let result = j.filter((z, a) => a <= (length - 1));
return result.join("");
}
我想知道我需要在上面的函数中进行哪些更改,以便它不会像上面的示例中所示那样删减单词。
解决方案
您可以使用动态模式,您可以在其中指定要使用省略号的字符串开头的最小字符数,以及字符数的长度。
^(?!\s)(.{3,10}\S)(?!\S).*
^
起点线(?!\s)
在开始时断言不是空格字符(.{3,10}\S)
捕获组 1(m[1]
在示例代码中表示为),匹配 3 - 10 次任何字符,然后匹配最后的非空白字符(?!\S)
负前瞻,在右边断言一个空白边界.*
匹配该行的其余部分
const wordsTruncate = (s, minNrOfChars, length) => {
if (minNrOfChars > length || minNrOfChars < 1 || length < 1) return s;
minNrOfChars--;
length--;
const regex = new RegExp(`^(?!\\s)(.{${minNrOfChars},${length}\}\\S)(?!\\S).*`);
const m = s.match(regex);
return m ? `${m[1]} (...)` : s;
}
const strings = [
"This is a long string",
"a b c d e f g h",
"a b c d e ",
"a b",
"this isatest",
"thisisatesttesttest",
"A bcdefghifkkle",
"a",
"ab",
"abc",
"abcd",
"abcde"
];
strings.forEach(s => {
console.log(`"${s}" --> ${wordsTruncate(s, 3, 10)}`);
});
推荐阅读
- reactive-programming - 如何在 webflux 上正确使用挂起函数和协程?
- swift - 在 RealityKit 中播放 USDZ 动画
- java - Java 列表
- javascript - 我如何将 react-native-draggable-flatlist 实现为函数组件而不是类?
- netsuite - NetSuite:需要使用事务保存搜索获取到岸成本类别行字段的值
- elasticsearch - Elasticsearch copy_to 字段类型
- javascript - 如何改进这个 Javascript 计算工具?
- amazon-s3 - SignatureDoesNotMatch 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法
- javascript - 为什么我的 XMLhttp 请求停止工作?它工作了多年
- sql - 光标执行如何创建字符串