如何利用字符串形式的正则表达式验证目标字符串匹配性?
解决方案
你遇到的问题核心是数组里存储的是字符串形式的正则表达式,而非可直接调用方法的RegExp对象,所以无法直接使用test()。要把这些字符串转换成有效的正则对象,可按以下步骤处理:
1. 解析正则字符串格式
你的数组里的正则字符串遵循/正则主体/修饰符的格式(比如/^(true|false)$/i),需要先拆分出正则主体和修饰符:
- 去掉字符串首尾的
/ - 分离主体内容与末尾的修饰符(如
i、g这类标识)
2. 用RegExp构造函数生成对象
通过new RegExp(正则主体, 修饰符)语法,将解析后的内容转换成可调用的正则对象。
具体代码实现
// 修正语法错误后的原始数组 var fieldTypes = [ '/^[0-9]+$/', '/^(true|false)$/i', '/^\\d{4}-\\d{2}-\\d{2}$/', '/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/i', 'yyyy-mm-ddThh:mm' ]; // 转换正则字符串为RegExp对象的工具函数 function strToRegExp(str) { // 过滤非标准正则格式的字符串 if (!str.startsWith('/') || !str.endsWith('/')) { return null; } // 移除首尾的/,拆分主体与修饰符 const content = str.slice(1, -1); const [pattern, flags = ''] = content.split('/'); // 生成正则对象 return new RegExp(pattern, flags); } // 测试值是否匹配任意一个正则规则 var value = '2024-05-20'; var isValid = false; for (const str of fieldTypes) { const regex = strToRegExp(str); if (regex && regex.test(value)) { isValid = true; break; } } if (!isValid) { alert('The value is not in the correct format.'); }
注意事项
- 数组最后一项
'yyyy-mm-ddThh:mm'不是标准正则字符串,转换函数会返回null,可根据需求跳过或做额外处理 - 如果你的正则字符串包含未转义的
/,上述拆分方法会出错,但通常第三方数据源提供的正则字符串会将/转义为\/,不会出现该问题
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

