如何在函数中用参数替换正则表达式中的固定字符串?
解决方案
要实现动态传入前缀的正则匹配,核心是不能用正则字面量(/.../)——因为字面量里无法直接插入变量,得改用RegExp构造函数来动态生成正则。另外要注意:如果前缀包含正则特殊字符(比如., *, +这类),直接拼接会破坏正则逻辑,所以得先把前缀里的特殊字符转义。
完整实现代码
// 工具函数:转义正则中的特殊字符 function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } function check_string(mystring, prefix) { // 先转义前缀,再拼接正则规则,带上mi修饰符 var escapedPrefix = escapeRegExp(prefix); var regEx = new RegExp(escapedPrefix + '\\-\\d+', 'mi'); var result = mystring.match(regEx); if (result != null) { alert(mystring); // 这里写你的业务逻辑 } else { alert("???" + mystring); } } // 测试示例 check_string("XF-98 bananaas ", "XF"); check_string("AB-1000 apple", "AB"); check_string("XY+123 test", "XY+"); // 测试带特殊字符的前缀
关键说明
escapeRegExp函数:把字符串里的正则元字符转义成普通字符,比如把+变成\+,避免干扰正则的匹配规则。new RegExp(规则字符串, 修饰符):构造动态正则,这里把转义后的前缀和-\d+(匹配连字符加数字)拼接,修饰符mi和原代码的字面量规则一致(多行匹配、忽略大小写)。- 构造函数里的反斜杠要写两个(
\\),因为字符串里的反斜杠本身需要转义。
内容的提问来源于stack exchange,提问作者Ghoul Fool
相关产品推荐
相关产品推荐

