You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.match()查找字符串字符时返回null而非匹配字符的问题

问题

我是编程新手,正在重新学习正则表达式。为JavaScript编码挑战的大型代码做前置测试,编写了如下函数:

const fdChar = (string, char) => {
  let regex = /char/gi; 
  console.log(string.match(regex)); 
}
fdChar('bacon', 'a'); 

调用fdChar('bacon', 'a')时,预期控制台输出'a',但实际返回null。我想定位字符串中的特定字符,请问是否无法将参数值存入regex变量?

解答

你当前的问题出在正则字面量的写法上:/char/gi里的char是固定字符串,正则会去匹配"char"这个单词,而不是你传入的参数char的值,所以自然匹配不到返回null。

要把参数作为正则的匹配目标,必须用RegExp构造函数创建正则,因为字面量语法无法直接插入变量。修改后的代码如下:

const fdChar = (string, char) => {
  // 第一个参数是匹配内容(用变量char),第二个是修饰符
  let regex = new RegExp(char, 'gi'); 
  console.log(string.match(regex)); 
}
fdChar('bacon', 'a'); 

调用后控制台会输出['a'],符合你的预期。

额外注意:如果传入的char是正则特殊字符(比如.、*、+这类),直接用会导致正则匹配异常,比如.会匹配任意字符。这时候需要先对特殊字符转义,示例如下:

// 转义正则特殊字符的工具函数
const escapeRegExp = (str) => {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
};

const fdChar = (string, char) => {
  let escapedChar = escapeRegExp(char);
  let regex = new RegExp(escapedChar, 'gi'); 
  console.log(string.match(regex)); 
}

内容的提问来源于stack exchange,提问作者Brando C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:32:05