Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将作为字符串从API返回的正则表达式转换为JavaScript中的有效正则表达式对象_Javascript_Regex_String_Ecmascript 6 - Fatal编程技术网

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

将作为字符串从API返回的正则表达式转换为JavaScript中的有效正则表达式对象,javascript,regex,string,ecmascript-6,Javascript,Regex,String,Ecmascript 6,我从外部API获取一个正则表达式,它以字符串的形式返回。我想使用regex进行地址验证,但在对字符串调用newregexp后,似乎无法正确地转义不需要的字符 下面是我要使用的正则表达式: console.logregexFromAPI 输出 /\W | ^box\s+\s*?\d+|邮局|\W | ^p\?\s*o\?\s+\s*?\d+/i 然而,我不能使用它——我需要它首先是一个正则表达式 如果我这样做,例如: const pattern=新的regexpregfromapi 然后: 控制台

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

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

console.logregexFromAPI

输出

/\W | ^box\s+\s*?\d+|邮局|\W | ^p\?\s*o\?\s+\s*?\d+/i

然而,我不能使用它——我需要它首先是一个正则表达式

如果我这样做,例如:

const pattern=新的regexpregfromapi

然后:

控制台模式

我得到以下信息:

输出

//W |^boxs+s*?d+|邮局+办公室W |^p.?s*o.?s+s*?d+/i/

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

提前感谢。

RegExp构造函数不希望字符串带有/分隔符,也不希望选项超过最后一个/。如果这样做,通过调用new RegExp生成的模式将生成一个与字符串匹配的模式,该字符串以文字正斜杠/开头,以正斜杠/结尾,后跟此处的标志字符,即

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

const fullPatternStr=String.raw`/\W^box\s+\s*?\d+\post\s+office\W^p\.\s*o\.\s+\s*?\d+/i`; 常量[,模式,标志]=fullPatternStr.match/\/.\/[a-z]*/; const regex=新的RegExppattern,标志; console.logregex RegExp构造函数不希望字符串带有/分隔符,也不希望选项超过final/。如果这样做,通过调用new RegExp生成的模式将生成一个与字符串匹配的模式,该字符串以文字正斜杠/开头,以正斜杠/结尾,后跟此处的标志字符,即

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

const fullPatternStr=String.raw`/\W^box\s+\s*?\d+\post\s+office\W^p\.\s*o\.\s+\s*?\d+/i`; 常量[,模式,标志]=fullPatternStr.match/\/.\/[a-z]*/; const regex=新的RegExppattern,标志;
console.logregex 去掉斜线和标志,然后重新构建:

const str=String.raw`/\W^box\s+\s*?\d+\s+邮局`\W^p\.\s*o\.\s+\s*?\d+/i`; 让regexBody=str.slice1,str.lastIndexOf/; 让flags=str.split/[str.split/.length-1]; 设regex=newregexpregbody,flags;
console.logregex 去掉斜线和标志,然后重新构建:

const str=String.raw`/\W^box\s+\s*?\d+\s+邮局`\W^p\.\s*o\.\s+\s*?\d+/i`; 让regexBody=str.slice1,str.lastIndexOf/; 让flags=str.split/[str.split/.length-1]; 设regex=newregexpregbody,flags;
console.logregex;。如果模式包含/SY,拆分/将导致错误。您可能还应该使用String.raw来定义与OP相同的str,否则,您将丢失转义字符,只是为了演示的准确性我不好-我不知道这一点..split/将导致错误,如果模式包含/sy,您可能还应该使用String.raw以与OP相同的方式定义str,否则你会失去转义字符,只是为了让演示准确我的错-我不知道。在第二行,你能解释为什么,是必要的吗?我喜欢这个解决方案,它也能工作,但我很好奇它在做什么..match返回一个数组,第一项是完全匹配的-在本例中,它将是整个字符串,您不关心,所以[,丢弃它没有变量名在[和、、和仅通过对数组中的第二个和第三个项进行解构来定义变量。非常漂亮。感谢您的洞察力和愿意解释的内容!。在第二行中,您能否解释为什么需要?我喜欢这个解决方案,它可以工作,但我很好奇它在做什么。match返回一个数组,例如第一个项目是完全匹配的-在本例中,它是整个字符串,您不关心,因此[,丢弃它-变量名不在[和、、和仅通过对数组中的第二项和第三项进行分解来定义变量。非常漂亮。感谢您的洞察力和愿意解释的内容!。