一个javascript字符串工具类

本文深入探讨了字符串处理中常见的方法,包括非空验证、字符串修剪、连接及判断字符串是否以特定字符开始或结束等实用技巧,对于前端开发人员尤其适用。

 一些常用的字符串方法:非空验证、以特定字符串开始或结尾

window.StringUtil = {};
StringUtil.isEmpty = function (a) {
    return StringUtil.isNull(a) || a.length === 0;
};
StringUtil.trimEmpty = function (a) {
    return StringUtil.isNull(a) || a.toString().trim().length === 0;
};
StringUtil.isNotEmpty = function (a) {
    return !StringUtil.isEmpty(a);
};
StringUtil.trimNotEmpty = function (a) {
    return !StringUtil.trimEmpty(a);
};
StringUtil.isNull = function (a) {
    return a === null || a=== undefined;
};
StringUtil.hasEmpty = function () {
    for(var i = 0;i<arguments.length;i++){
        if(StringUtil.isEmpty(arguments[i])){
            return true;
        }
    }
    return false;
};
StringUtil.hasNull = function () {
    for(var i = 0;i<arguments.length;i++){
        if(StringUtil.isNull(arguments[i])){
            return true;
        }
    }
    return false;
};
StringUtil.trim = function (str) {
    return str == null ? null : str.toString().trim();
};
StringUtil.safeToString = function (a,dv) {
    return !StringUtil.isEmpty(a) ? a : dv;
};
StringUtil.nvl = function (str) {
    var len = arguments.length;
    for(var i=0;i<len;i++){
        if(StringUtil.isNotEmpty(arguments[i])){
            return arguments[i];
        }
    }
    return null;
};
StringUtil.join = function (arr,sec) {
    if(sec === undefined){
        sec = ",";
    }
    var array = [];
    if(arr.constructor===Array){
        array = arr;
    }else if(arr.constructor===String){
        array.push(arr);
    }else if(arr.constructor===Object){
        for(var key in arr){
            array.push(arr[key]);
        }
    }
    return array.join(sec);
};
/**
 * a startwidth b
 */
StringUtil.startWidth = function (a,b) {
    return !StringUtil.hasNull(a,b) && a.indexOf(b) === 0;
};
StringUtil.endWidth = function (a,b) {
    return !StringUtil.hasNull(a,b) && a.indexOf(b) === a.length -b.length;
};

 

<think>我们正在查找JavaScript中用于字符串截取的工具类。根据之前的引用,我们可以总结出一些常用的字符串截取方法,包括原生的substr、substring和slice,以及一些工具函数(如引用3和4中提到的)。不过,引用3和4都是关于自定义工具函数的,引用3提供了一个首字母大写的函数,引用4则列出了多种字符串处理工具(但主要是Java的,所以不适用)。 在JavaScript中,字符串截取通常使用以下原生方法: 1. `substr(start, length)`: 从索引`start`开始,截取`length`个字符。注意:这个方法虽然可用,但已被标记为遗留函数,不推荐使用。 2. `substring(start, end)`: 截取从索引`start`到`end`(不包括`end`)之间的字符串。 3. `slice(start, end)`: 与`substring`类似,但支持负数索引(从字符串末尾开始计算)。 另外,引用2中提到了使用`lodash.slice`,但这是针对数组的,对于字符串,我们可以用`split`将其转为数组再操作,但这样效率不高。 根据需求,我们可能需要一个字符串截取的工具类(即一组工具函数)。我们可以参考引用3和4的思路,但注意引用4是Java的,所以我们主要参考引用3的格式,创建一些常用的字符串截取工具函数。 下面我们将创建一个简单的字符串工具类,包含几个常用的字符串截取功能: ```javascript /** * 字符串工具类 */ class StringUtils { /** * 截取指定长度的子字符串(从开始索引到指定长度) * @param {string} str 原始字符串 * @param {number} start 开始索引 * @param {number} length 截取的长度(可选,如果不传则截取到末尾) * @returns {string} 截取后的字符串 */ static substr(str, start, length) { if (length === undefined) { return str.substring(start); } return str.substring(start, start + length); } /** * 截取两个索引之间的字符串(不包括结束索引) * @param {string} str 原始字符串 * @param {number} start 开始索引 * @param {number} end 结束索引(可选,如果不传则截取到末尾) * @returns {string} 截取后的字符串 */ static substring(str, start, end) { return str.substring(start, end); } /** * 使用slice方法截取字符串(支持负数索引) * @param {string} str 原始字符串 * @param {number} start 开始索引(可以是负数) * @param {number} end 结束索引(可选,可以是负数) * @returns {string} 截取后的字符串 */ static slice(str, start, end) { return str.slice(start, end); } /** * 截取字符串中第一个匹配子串之前的部分 * @param {string} str 原始字符串 * @param {string} separator 分隔子串 * @returns {string} 截取后的字符串 */ static before(str, separator) { const index = str.indexOf(separator); if (index === -1) { return str; } return str.substring(0, index); } /** * 截取字符串中第一个匹配子串之后的部分 * @param {string} str 原始字符串 * @param {string} separator 分隔子串 * @returns {string} 截取后的字符串 */ static after(str, separator) { const index = str.indexOf(separator); if (index === -1) { return ''; } return str.substring(index + separator.length); } /** * 截取字符串中最后一个匹配子串之前的部分 * @param {string} str 原始字符串 * @param {string} separator 分隔子串 * @returns {string} 截取后的字符串 */ static beforeLast(str, separator) { const index = str.lastIndexOf(separator); if (index === -1) { return str; } return str.substring(0, index); } /** * 截取字符串中最后一个匹配子串之后的部分 * @param {string} str 原始字符串 * @param {string} separator 分隔子串 * @returns {string} 截取后的字符串 */ static afterLast(str, separator) { const index = str.lastIndexOf(separator); if (index === -1) { return ''; } return str.substring(index + separator.length); } } ``` 使用示例: ```javascript const str = 'hello world'; console.log(StringUtils.substr(str, 2, 7)); // 'llo wor' console.log(StringUtils.substring(str, 2, 9)); // 'llo worl' console.log(StringUtils.slice(str, 2, 9)); // 'llo worl' console.log(StringUtils.before(str, ' ')); // 'hello' console.log(StringUtils.after(str, ' ')); // 'world' console.log(StringUtils.beforeLast(str, 'l')); // 'he' (注意:最后一个'l'之前是"hel",但取的是最后一个'l'前面的部分,所以是"he") console.log(StringUtils.afterLast(str, 'l')); // 'd' (因为最后一个'l'后面是'd') ``` 注意:上述工具类中的`substr`方法我们使用了`substring`来实现,因为原生的`substr`已不推荐使用。我们通过计算结束索引来达到同样的效果。 另外,我们还可以根据需要添加其他工具函数,比如截取两个字符串之间的内容等(如引用4中提到的正则表达式截取两字符串之间的内容)。 我们再来添加一个使用正则表达式截取两个字符串之间内容的方法: ```javascript /** * 截取两个字符串之间的内容(第一次出现) * @param {string} str 原始字符串 * @param {string} startStr 起始字符串 * @param {string} endStr 结束字符串 * @returns {string} 截取到的内容,如果没有找到返回空字符串 */ static between(str, startStr, endStr) { const startIndex = str.indexOf(startStr); if (startIndex === -1) { return ''; } const endIndex = str.indexOf(endStr, startIndex + startStr.length); if (endIndex === -1) { return ''; } return str.substring(startIndex + startStr.length, endIndex); } /** * 使用正则表达式截取两个字符串之间的内容(全局匹配) * @param {string} str 原始字符串 * @param {string} startStr 起始字符串 * @param {string} endStr 结束字符串 * @returns {string[]} 所有匹配到的内容组成的数组 */ static betweenAll(str, startStr, endStr) { const regex = new RegExp(`${escapeRegExp(startStr)}(.*?)${escapeRegExp(endStr)}`, 'g'); const results = []; let match; while ((match = regex.exec(str)) !== null) { results.push(match[1]); } return results; } // 辅助函数:转义正则表达式的特殊字符 function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } ``` 这样,我们就构建了一个简单的字符串截取工具类。用户可以根据需要直接调用这些静态方法。 注意:由于引用中并没有提供现成的JavaScript字符串工具类,所以我们自行设计了一个。在实际开发中,也可以使用一些成熟的第三方库,如`lodash`(它有一些字符串处理函数)或`string.js`等。 另外,引用3中提到了首字母大写的工具函数,我们也可以将其加入: ```javascript /** * 将字符串的首字母转换为大写 * @param {string} str 原始字符串 * @returns {string} 首字母大写的字符串 */ static capitalize(str) { if (!str) return ''; return str.charAt(0).toUpperCase() + str.slice(1); } ``` 综上所述,我们创建了一个包含多种字符串截取和转换功能的工具类。 §§相关问题§§ 1. JavaScript中原生字符串截取方法有哪些区别? 2. 如何实现一个截取两个字符串之间内容的工具函数? 3. 有哪些流行的JavaScript字符串处理库? </think>### JavaScript字符串截取工具类实现 根据您的需求,我参考站内资料实现了一个JavaScript字符串截取工具类,包含常用字符串操作功能: ```javascript /** * JavaScript字符串处理工具类 */ class StringUtils { /** * 截取指定长度的子字符串 * @param {string} str - 原始字符串 * @param {number} start - 开始索引 * @param {number} [length] - 截取长度(可选) * @returns {string} 截取结果 * * 示例: * substr('hello world', 2, 7) => 'llo wor' * 引用[1] */ static substr(str, start, length) { if (length === undefined) return str.substring(start); return str.substring(start, start + length); } /** * 截取两个索引之间的子字符串 * @param {string} str - 原始字符串 * @param {number} start - 开始索引 * @param {number} end - 结束索引 * @returns {string} 截取结果 * * 示例: * substring('hello world', 2, 9) => 'llo worl' */ static substring(str, start, end) { return str.substring(start, end); } /** * 支持负索引的字符串截取 * @param {string} str - 原始字符串 * @param {number} start - 开始索引(支持负数) * @param {number} [end] - 结束索引(可选) * @returns {string} 截取结果 * * 示例: * slice('hello world', -5, -1) => 'worl' * 引用[2] */ static slice(str, start, end) { if (start < 0) start = str.length + start; if (end === undefined) return str.slice(start); if (end < 0) end = str.length + end; return str.slice(start, end); } /** * 获取两个字符串之间的内容 * @param {string} str - 原始字符串 * @param {string} startStr - 起始字符串 * @param {string} endStr - 结束字符串 * @returns {string} 截取结果 * * 示例: * between('Name: John, Age:30', 'Name: ', ',') => 'John' * 引用[4] */ static between(str, startStr, endStr) { const startIndex = str.indexOf(startStr) + startStr.length; const endIndex = str.indexOf(endStr, startIndex); if (startIndex < 0 || endIndex < 0) return ''; return str.substring(startIndex, endIndex); } /** * 首字母大写转换 * @param {string} str - 原始字符串 * @returns {string} 转换结果 * * 示例: * capitalize('hello') => 'Hello' * 引用[3] */ static capitalize(str) { if (!str) return ''; return str.charAt(0).toUpperCase() + str.slice(1); } } // 使用示例 const sample = 'hello world'; console.log(StringUtils.substr(sample, 2, 7)); // "llo wor" console.log(StringUtils.slice(sample, -5, -1)); // "worl" console.log(StringUtils.capitalize('javascript')); // "Javascript" ``` ### 核心功能说明 1. **`substr`方法** 基于原生`substring`实现,支持指定起始位置和截取长度,符合引用[1]的用法 2. **`slice`方法** 支持负数索引(从字符串末尾计算),比原生`substring`更灵活,符合引用[2]的需求 3. **`between`方法** 提取两个标记字符串之间的内容,适用于解析结构化文本,参考引用[4]的第6项功能 4. **`capitalize`方法** 实现首字母大写转换,参考引用[3]的工具函数 ### 使用建议 1. 常规截取:优先使用`substr()`或`substring()` 2. 需要负数索引时:使用`slice()` 3. 解析模板内容:使用`between()` 4. 格式化文本:使用`capitalize()` 该工具类封装了常见的字符串操作需求,可直接集成到项目中,避免重复实现基础功能[^1][^2][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值