后端返回一个正则表达式字符串,前端该怎么使用?

452 阅读1分钟

后端返回一个正则表达式字符串,前端该怎么使用?

改项目代码的时候发现一个没见过的函数,场景是后端返回了一个正则表达式字符串,前端使用这个字符串去校验一个值: eval('/^[1-9]\d*\.\d+|[1-9]\d*$/').test(0.1) 大致是这么个用法。

好奇查了下这个eval函数,看到有意思的一个解释:

image.png

那就不用这个函数看看怎么写吧。

换成这么写:new RegExp('/^[1-9]\d*\.\d+|[1-9]\d*$/').test(0.1)。 神奇的一幕出现了:

image.png

结果并不相同。

找原因:

image.png

试一下,果然解决了:

image.png

这就有意思了。 优化代码,去除调首尾的斜杠:

image.png

var str = '/^[1-9]\d*.\d+|[1-9]\d*/;//带斜杠的变量varregexp=newRegExp(str.replace(/\/\//'; // 带斜杠的变量 var regexp = new RegExp(str.replace(/^\/|\//g, '')); // 去掉斜杠并创建正则表达式对象 regexp.test(0.1); // 返回true