JS实现含有中文字符串的友好截取功能分析

让我来详细讲解一下 "JS实现含有中文字符串的友好截取功能分析" 的完整攻略。

1. 背景

在前端开发中,经常需要对文本进行截取展示,但是如果直接使用JS自带的字符串截取方法,会出现截取中文时的问题。因为中文字符在计算机中占用两个字节,如果按照字节截取,就会出现乱码或者截取到半个中文的情况。因此,我们需要对字符串截取封装一个方法,可以实现友好的中英文截取,而不会影响字符串的完整性。

2. 加载第三方插件或工具库

两个主流的工具库提供了字符串截取的函数,并且针对中英文截取都有优秀的解决方案。这两个工具库分别是:LodashSubstring.slice() 方法。在使用前需要先引入对应的文件或依赖。

以Lodash为例:

<script src="https://cdn.bootcss.com/lodash.js/4.17.11/lodash.min.js"></script>

3. 实现友好的中英文字符串截取方法

/**
 * 中英文混合字符串的截取
 * @param {string} str - 待截取的字符串
 * @param {number} len - 截取的长度
 * @returns {string} 返回截取后的字符串
 */
function cutString(str, len) {
  // 如果字符串为空或长度为0,直接返回空字符串
  if (!str || !len) {
    return '';
  }
  // 将正则表达式表示为任何非英文或数字字符或非标点符号字符的字符
  const regex = /[^\x00-\xff]|\w|\d|\s+/g;
  // 迭代计算截取子串的真实长度
  let count = 0;
  let subString = '';
  for (let i = 0; i < str.length; i++) {
    const nowChar = str.charAt(i);
    // 使用正则表达式测试当前字符是否为非英文或数字字符或非标点符号字符的字符
    const isMatch = regex.test(nowChar);
    if (isMatch) {
      count += 2;
    } else {
      count += 1;
    }
    if (count <= len) {
      subString += nowChar;
    } else {
      break;
    }
  }
  return subString;
}

上述方法实际上是通过循环一个字符串,通过正则表达式识别中英文字符的宽度,将每一个字符对应的宽度计算在内,最后生成子字符串。

4. 示例展示

具体应用场景中,可以如下展示:

const str = '这是一个混合字符串,中文和English都包含在其中。This is a mixed string, it contains both Chinese and English.';
// 使用Lodash库提供的_.truncate()方法
const shortStr1 = _.truncate(str, { length: 16 });
console.log(shortStr1); // 这是一个混合字符...
// 使用自定义的cutString()方法
const shortStr2 = cutString(str, 16)
console.log(shortStr2); // 这是一个混合字...

上述示例中,分别使用了Lodash库提供的方法和自定义的方法实现随意截取字符串并保证完整性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现含有中文字符串的友好截取功能分析 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 原生js的ajax和解决跨域的jsonp(实例讲解)

    关于原生JS的AJAX和JSONP的介绍和实例讲解,我将从以下三个部分来进行详细解答。 AJAX的介绍和使用方法 AJAX全称为Asynchronous JavaScript and XML(异步的JavaScript和XML),是一种前端常用数据交换技术,能够实现页面异步刷新,避免了页面重新刷新的效果,减轻服务器对请求的压力。使用AJAX技术可以更好的优化…

    JavaScript 2023年5月27日
    00
  • 分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容

    这里是分享自定义的console类让JS调试代码更方便的攻略: 1. 创建一个自定义的Console类 创建一个可以封装原生console使其在不同浏览器环境下具有兼容性的类,示例代码如下: class CustomConsole { constructor() { this.logHistory = []; this.registerConsoleMeth…

    JavaScript 2023年6月11日
    00
  • JS自定义函数实现时间戳转换成date的方法示例

    下面是关于“JS自定义函数实现时间戳转换成date的方法示例”的完整攻略: 1. 理解时间戳和Date对象 在开始编写时间戳转换成date的函数之前,我们需要先了解什么是时间戳和Date对象。时间戳是指从1970年1月1日00:00:00(UTC/GMT的午夜)开始所经过的秒数,它是一串数字,通常是10位或13位;而Date对象是JavaScript的日期对…

    JavaScript 2023年5月27日
    00
  • javascript实现的时间格式加8小时功能示例

    下面是关于“JavaScript实现的时间格式加8小时功能”的详细讲解攻略。 1. 原理简介 JavaScript实现的时间格式加8小时功能,其原理就是将当前的时间戳加上8小时的时差,然后再将其格式化为我们需要的时间格式。 在JavaScript中,我们可以使用new Date()创建一个当前时间的Date对象,可以使用getTime()获取Date对象对应…

    JavaScript 2023年5月27日
    00
  • 后缀就扩展名为js的文件是什么文件 原创

    后缀为js的文件是指JavaScript文件,JavaScript是一种基于对象和事件驱动的脚本语言,常用于网页前端编程。 在网站开发过程中,JavaScript文件被用于实现网站的交互和动态效果,比如表单验证、页面布局等。通常,JavaScript文件的文件名以.js为后缀名。JavaScript文件可以直接在HTML文件中引用,也可以在服务器端使用。 以…

    JavaScript 2023年5月27日
    00
  • JavaScript函数式编程(Functional Programming)声明式与命令式实例分析

    JavaScript函数式编程(Functional Programming)声明式与命令式实例分析 什么是函数式编程? 函数式编程(Functional Programming)是一种编程范式,其核心思想是用函数去组织代码,减少对于状态的依赖和改变,强调函数的纯粹性和不可变性,从而实现代码的简洁性、健壮性和可维护性。 声明式编程与命令式编程 命令式编程 命…

    JavaScript 2023年5月27日
    00
  • discuz中用到的javascript函数解析 原创第2/2页

    下面就是对于“discuz中用到的javascript函数解析 原创第2/2页”的完整攻略: 1. 概述 该文章介绍了 discuz 论坛中常用的 JavaScript 函数解析,主要包括 Ajax 交互、 DOM 操作以及事件处理等。 2. Ajax 交互 2.1 Ajax.call() 该函数用于发送 Ajax 请求,并接收服务器返回的 JSON 格式数…

    JavaScript 2023年6月10日
    00
  • Dom与浏览器兼容性说明

    DOM(文档对象模型)是一种用来操作 HTML 和 XML 文档的标准编程接口。在开发网站的时候,我们通常都需要使用DOM来实现对网页元素的操作。但是,由于不同浏览器厂商对DOM的实现方式不同,导致DOM在不同浏览器中的兼容性存在问题。本文将讲解DOM与浏览器兼容性说明的完整攻略,包括DOM的概念、常见兼容性问题及解决方法等内容。 DOM概念 DOM 是一组…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部