1. 整体结构
这是一个名为字符
的对象,包含两个主要方法:
匹配查找
: 用于查找字符串中的匹配内容匹配索引
: 用于查找匹配内容在字符串中的位置
2. 匹配查找方法 (字符.匹配查找)
字符.匹配查找(str, searchvalue)
参数说明:
str
: 要搜索的目标字符串searchvalue
: 搜索条件,可以是字符串或正则表达式
功能特点:
- 参数验证:
if (typeof str === "undefined" || str === null) {
console.error("[字符.匹配查找] 错误:str参数未定义或为null");
return null;
}
- 检查参数是否为空或未定义
- 出错时返回null并打印错误信息
- 字符串处理:
str = String(str);
- 搜索条件处理:
if (typeof searchvalue === 'string') {
searchvalue = new RegExp(searchvalue.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
}
- 如果是字符串,转换为正则表达式并转义特殊字符
- 如果是正则表达式,确保有全局标志
- 执行匹配:
let matches = str.match(searchvalue);
- 使用JavaScript的match方法进行匹配
- 返回所有匹配项的数组
3. 匹配索引方法 (字符.匹配索引)
字符.匹配索引(str, searchvalue)
参数说明:
功能特点:
- 参数验证:与匹配查找相同
- 正则表达式处理:
let regex;
if (typeof searchvalue === 'string') {
regex = new RegExp(searchvalue.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
}
- 将搜索条件统一转换为正则表达式
- 处理特殊字符和全局标志
- 查找位置:
while ((match = regex.exec(str)) !== null) {
indices.push(match.index);
}
- 使用exec方法循环查找所有匹配
- 记录每个匹配的位置(索引)
- 防止死循环:
if (match.index === regex.lastIndex) {
regex.lastIndex++;
}
4. 错误处理
两个方法都包含完整的错误处理机制:
try {
// 方法主体
} catch (error) {
console.error(`[字符.xxx] 错误:${error}`);
return null;
}
- 使用try-catch捕获所有可能的错误
- 出错时返回null并打印详细错误信息
5. 使用示例
代码包含四个完整的示例:
// 示例1:使用字符串查找内容
var str = "How are you doing you today?";
var fgh = 字符.匹配查找(str, 'you');
printl(fgh); // 输出: ["you", "you"]
// 示例2:使用正则表达式查找内容
var fgh = 字符.匹配查找(str, /you/gi);
printl(fgh); // 输出: ["you", "you"]
// 示例3:使用字符串查找位置
var fgh = 字符.匹配索引(str, 'you');
printl(fgh); // 输出: [8, 19]
// 示例4:使用正则表达式查找位置
var fgh = 字符.匹配索引(str, /you/gi);
printl(fgh); // 输出: [8, 19]
6. 代码特点
- 健壮性:
- 完整的参数验证
- 全面的错误处理
- 特殊情况的处理(如零长度匹配)
- 灵活性:
- 支持字符串和正则表达式两种搜索方式
- 自动处理正则表达式标志
- 转义特殊字符
- 可维护性:
- 使用便利:
这段代码提供了一个完整的字符串查找解决方案,既可以获取匹配的内容,也可以获取匹配的位置,适用于各种字符串处理场景。