如何正确解析CMS传入的带转义字符的正则表达式?
解决CMS返回带转义斜杠的正则表达式解析问题
问题原因
你从CMS获取的正则字符串是带首尾斜杠的格式(比如"/^\d+$/"),直接传入new RegExp()时,这些斜杠会被当作正则模式的一部分,导致生成的正则变成/\/^\d+$\/——它实际匹配的是包含/^\d+$/这段文本的内容,而非你原本需要的纯数字校验规则,所以验证失败。
解决步骤
- 先清理从CMS拿到的字符串,移除首尾的斜杠
- 用清理后的纯模式字符串创建正则实例
代码示例
const rawRegex = this.question.QuestionExpression; // 移除字符串首尾的斜杠 const regexPattern = rawRegex.replace(/^\/|\/$/g, ''); // 创建正确的正则实例 const rea = new RegExp(regexPattern); // 测试验证 console.log(rea.test(this.answer)); // 此时会返回true
额外说明
如果你的正则需要修饰符(比如g全局匹配、i忽略大小写),且CMS存储时包含在末尾斜杠后(比如"/^\d+$/i"),可以这样处理:
const rawRegex = this.question.QuestionExpression; // 提取模式和修饰符 const matchResult = rawRegex.match(/^\/(.*)\/([gimuy]*)$/); if (matchResult) { const regexPattern = matchResult[1]; const regexFlags = matchResult[2]; const rea = new RegExp(regexPattern, regexFlags); }
内容的提问来源于stack exchange,提问作者Paul Carlson
相关产品推荐
相关产品推荐

