gpt4 book ai didi

javascript - 将作为字符串从 API 返回的正则表达式转换为 JavaScript 中的有效 RegEx 对象

转载 作者:行者123 更新时间:2023-11-30 09:15:37 24 4
gpt4 key购买 nike

我正在从外部 API 获取正则表达式,它以字符串形式返回。我想使用正则表达式进行地址验证,但在对字符串调用 new RegExp() 后,我似乎无法正确转义不需要的字符。

这是我要使用的正则表达式:

console.log(regexFromAPI);

Output

/((\W|^)box\s+(#\s*)?\d+|post\s+office|(\W|^)p\.?\s*o\.?\s+(#\s*)?\d+)/i

但是,我不能使用它——我需要它首先成为一个正则表达式。

如果我这样做,例如:

const pattern = new RegExp(regexFromAPI);

然后:

console.log(模式);

我得到以下信息:

Output

//((W|^)boxs+(#s*)?d+|posts+office|(W|^)p.?s*o.?s+(#s*)?d+)/我/

我的问题是...为什么会发生这种情况,我该如何避免?我想将我的字符串文字用作正则表达式。

提前致谢。

最佳答案

RegExp 构造函数不期望带有 / 分隔符的字符串,也不期望带有超过最终 / 的选项的字符串。如果这样做,通过调用 new RegExp 生成的模式将导致匹配以文字正斜杠 / 开头并以正斜杠结尾的字符串斜杠 / 后跟标志字符(此处为 i)。

相反,您应该传递不带 / 分隔符的模式字符串,并将标志作为第二个参数传递 - 您可以使用 另一个 正则表达式:

const fullPatternStr = String.raw`/((\W|^)box\s+(#\s*)?\d+|post\s+office|(\W|^)p\.?\s*o\.?\s+(#\s*)?\d+)/i`;

const [, pattern, flags] = fullPatternStr.match(/\/(.*)\/([a-z]*)/);
const regex = new RegExp(pattern, flags);
console.log(regex);

关于javascript - 将作为字符串从 API 返回的正则表达式转换为 JavaScript 中的有效 RegEx 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55291173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com