正则匹配内容高亮展示(不区分大小写, 全角半角)

@[TOC](这正则匹配内容高亮展示(不区分大小写, 全角半角)里写自定义目录标题)

正则匹配内容高亮展示(不区分大小写, 全角半角)

export function highlight(searchKey, text) {
  let tempText = text;
  if (searchKey) {
    // i 忽略大小写  g 全局
    let keyHalf, keyFull;
    // 全角
    keyHalf = Q2B(searchKey);
    keyFull = B2Q(searchKey);
    const regExp = new RegExp(keyHalf + '|' + keyFull, 'gi');
    tempText = tempText.replace(regExp, function (match) {
      return '<span  style="color: #F55047">' + match + '</span>';
    });
  }
  return tempText;
}
/**
 * 全角转半角
 * @param {*} str
 * @returns
 */
function Q2B(str) {
  var result = '';
  let code = null;
  for (var i = 0; i < str.length; i++) {
    code = str.charCodeAt(i);
    if (code >= 65281 && code <= 65374) {
      result += String.fromCharCode(str.charCodeAt(i) - 65248);
    } else if (code == 12288) {
      result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
    } else {
      result += str.charAt(i);
    }
  }
  return result;
}
/**
 * 半角转全角
 * @param {*} str
 */
function B2Q(str) {
  var result = '';
  let code = null;
  for (var i = 0; i < str.length; i++) {
    code = str.charCodeAt(i);
    if (code >= 33 && code <= 126) {
      result += String.fromCharCode(str.charCodeAt(i) + 65248);
    } else if (code == 32) {
      result += String.fromCharCode(str.charCodeAt(i) + 12288 - 32);
    } else {
      result += str.charAt(i);
    }
  }
  return result;
}
<think>好的,用户现在遇到了一个SQL错误:1064,具体错误信息是语法问题出现在'^[李吴]’附近的第2行。我需要先理解这个错误的根源。用户之前询问了如何查询姓吴和李的人员信息,我给出了两种方法,其中第二种是使用正则表达式NOT REGEXP。可能用户在尝试第二种方法时,复制代码后出现了错误。 首先,我需要检查用户提供的错误信息中的代码片段。错误提示中提到的是在''^[李吴]’'附近有语法错误。看起来用户的正则表达式部分的引号可能有问题。比如,用户可能使用了中文的引号或者单引号没有正确闭合。 接下来,我需要回忆MySQL中正则表达式的正确语法。使用REGEXP时,模式应该用单引号括起来,例如name NOT REGEXP '^[吴李]'。如果用户误用了中文的引号,比如全角的‘或’,而是标准的单引号',就会导致语法错误。此外,检查是否有额外的空格或拼写错误,比如REGEXP写成了REGEX或其他拼写错误。 另外,用户可能在编写SQL时,在正则表达式中使用了支持的语法,比如在MySQL中,正则表达式默认是区分大小写的,但用户可能尝试使用(?i)来忽略大小写,而MySQL并支持这种语法,这也会导致错误。过根据错误提示的位置,看起来主要问题还是引号的问题。 还可能存在其他问题,比如表名或字段名是否正确,是否缺少必要的空格或关键字错误。但根据错误信息指向的位置,问题集中在正则表达式的字符串部分。 接下来,我需要整理常见的导致1064错误的原因,特别是与正则表达式相关的,然后结合用户的具体情况,给出解释和解决方案。需要指出用户可能使用了错误的引号,建议检查并替换为英文单引号,并确保整个语句的正确性。 此外,用户可能在编写SQL时,将正则表达式的模式写成了'^[李吴]’,注意最后的单引号是否是正确的方向,是否存在中文符号。例如,用户可能使用了’而是',导致引号匹配。 最后,给出修正后的正确代码示例,并提醒用户注意符号的输入方式,避免使用中文标点。同时,可能还需要提醒用户检查MySQL版本,确保REGEXP功能可用,但通常这是主要问题,因为REGEXP在大多数版本中都支持。 总结,用户的问题主要出在正则表达式字符串的引号使用当,导致语法错误。需要指导用户检查并更正引号,确保使用英文单引号,并正确闭合。</think>--- ### **错误原因分析** 你遇到的错误 `1064` 是 MySQL 的语法错误,具体问题出在正则表达式 `'^[李吴]’` 的符号使用上。以下是详细解释: --- #### **1. 引号格式错误** - **错误表现**: 你使用的单引号 `’` 是中文或全角符号(如 `‘` 或 `’`),而 MySQL 仅支持英文单引号 `'`。 - **对比示例**: ```sql -- 错误写法(中文引号) WHERE name NOT REGEXP '^[李吴]’; -- ↑ 此处结尾是中文符号 -- 正确写法(英文引号) WHERE name NOT REGEXP '^[李吴]'; -- ↑ 开头和结尾均为英文符号 ``` --- #### **2. 正则表达式语法问题** MySQL 正则表达式需遵循以下规则: - 使用英文单引号包裹正则表达式(如 `'^[吴李]'`)。 - 若需匹配中文字符,确保字符直接写入括号(如 `[吴李]`),无需额外转义。 - 检查符号是否为半角(英文)格式。 --- ### **修正后的正确写法** ```sql SELECT * FROM 人员表 WHERE name NOT REGEXP '^[吴李]'; -- 使用英文单引号 ``` --- ### **其他可能原因** 1. **多余的空格或拼写错误**: 检查 `REGEXP` 是否拼写正确,以及符号前后是否有非法空格。 ```sql -- 错误写法(拼写错误) WHERE name NOT REGX '^[吴李]'; -- 错误写法(多余空格) WHERE name NOT REGEXP '^[吴李]'; ``` 2. **MySQL 版本兼容性**: 极低版本的 MySQL 可能支持正则表达式(建议使用 5.6 及以上版本)。 --- ### **如何避免类似错误?** 1. **使用纯英文符号**: 在 SQL 中全程使用英文输入法输入符号(如 `'`、`,`、`;`)。 2. **验证正则表达式**: 先在简单查询中测试正则表达式(如 `SELECT '测试' REGEXP '^[吴李]';`)。 3. **工具辅助**: 使用 IDE(如 MySQL Workbench)或文本编辑器(如 VS Code)的语法高亮功能,快速识别符号格式错误。 --- ### **错误总结** | **错误类型** | **具体表现** | **解决方案** | |--------------|--------------------------|------------------------------| | 符号格式错误 | 使用中文/全角引号 | 替换为英文单引号 `'` | | 正则语法错误 | 符号未闭合或拼写错误 | 检查 `REGEXP` 和正则表达式格式 | | 版本兼容性 | 低版本 MySQL 支持正则表达式 | 升级到 MySQL 5.6 或更高版本 | 希望以上分析能帮你彻底解决问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值