繁体   English   中英

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

[英]Turning a regex returned as a string from an API into a valid RegEx object in JavaScript

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

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

console.log(regexFromAPI);

输出量

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

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

如果我这样做,例如:

const pattern = new RegExp(regexFromAPI);

接着:

console.log(pattern);

我得到以下内容:

输出量

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

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

提前致谢。

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(/\\/(.*)\\/([az]*)/); const regex = new RegExp(pattern, flags); console.log(regex); 

脱下斜杠和标记,然后对其进行重构:

 const str = String.raw`/((\\W|^)box\\s+(#\\s*)?\\d+|post\\s+office|(\\W|^)p\\.?\\s*o\\.?\\s+(#\\s*)?\\d+)/i`; let regexBody = str.slice(1, str.lastIndexOf("/")); let flags = str.split("/")[str.split("/").length - 1]; let regex = new RegExp(regexBody, flags); console.log(regex); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM