从字符串中jQuery Regex

jQuery Regex from String

本文关键字:Regex jQuery 字符串      更新时间:2023-09-26

我有以下Regex,它来自HTML元素上的数据属性:

/^$|^[0-9]{2}.[0-9]{4}$/g

当我(手动)这样做时:

/^$|^[0-9]{2}.[0-9]{4}$/g.test('01.2012');

它工作并返回true

当我把Regex放在这样的变量中时:

var inputRegex = $(this).attr('data-validation');

做:

inputRegex.test(input);

我得到:

inputRegex.test不是函数。

我知道这是因为inputRegex是一个String,String没有测试函数,但当我创建RegExp对象(new RegExp($(this).attr('data-validation'))时,它会通过转义来破坏我的正则表达式:

/'/^$|^[0-9]{2}.[0-9]{4}$'/g/

如何将数据属性值用作正则表达式?请注意,我不能执行:var regex = new RegExp(string, 'g');,因为正则表达式是从属性中预定义的。

var pattern = ''d+';
var regExp = new RegExp(pattern, 'g');
'1234dasf13241234'.match(regExp)

这是你需要的吗?

var pattern = $(this).attr('data-validation');;
var regExp = new RegExp(pattern, 'g');
regExp.test(input);

在您的情况下

您的问题是,您需要从元素的属性中检索regex模式,但它返回string,并且您希望javascript代码中的字符串值像inline一样,就像简单地声明regex一样。如果这真的是你想要实现的,最接近的解决方案是使用eval函数,请参阅下面的更新代码:

var stringreg = "var inputRegex =" + $("#test").attr('data-validation') + ";"
eval(stringreg);
inputRegex.test(input);

这可能有助于

var validation =  "/^$|^[0-9]{2}.[0-9]{4}$/g"; //$(this).attr('data-validation')
var startIndex = validation.indexOf('/')+1
var lastIndex = validation.lastIndexOf('/');
var pattern = validation.substring(startIndex,lastIndex);
var options = validation.substring(lastIndex+1);
var regExp = new RegExp(pattern, options);
regExp.test('01.2012');
// true