使用.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
相关产品推荐
相关产品推荐

