在javascript中以双引号提供时,正则表达式不起作用

在javascript中以双引号提供时,正则表达式不起作用,javascript,jquery,regex,Javascript,Jquery,Regex,我试图在javascript中使用常规Expression,但它不起作用。我的自定义控件包含名为RegEx的属性,该属性由用户提供,我需要根据该RegEx验证输入值。由于JS中的属性将在双引号(“”)中,因此regualr表达式失败(案例1)。案例2虽然两个案例的正则表达式是相同的,但唯一的区别是案例1它是双引号。有人能告诉我为什么它不起作用吗。 regexxp=“/^\d{5}$/”-在我的aspx页面 var value = "11111"; if(value.toString()

我试图在javascript中使用常规Expression,但它不起作用。我的自定义控件包含名为RegEx的属性,该属性由用户提供,我需要根据该RegEx验证输入值。由于JS中的属性将在双引号(“”)中,因此regualr表达式失败(案例1)。案例2虽然两个案例的正则表达式是相同的,但唯一的区别是案例1它是双引号。有人能告诉我为什么它不起作用吗。 regexxp=“/^\d{5}$/”-在我的aspx页面

var value = "11111";
     if(value.toString().search($(element).attr('RegexExp')) != -1)
    {
        return true;
    }
    else
    {
        return false;
    }

  var reg = /^\d{5}$/;
     if(value.toString().search(reg) != -1)
    {
        return true;
    }
    else
    {
        return false;
    }
改为这样做:

var reg = new RegExp($(element).attr('RegexExp'));
更新:您还需要去掉/字符,因为这些字符不应提供给RegExp构造函数:

var regexExp = $(element).attr('RegexExp');
var reg = new RegExp(regexExp.substring(1, regexExp.length - 1));
改为这样做:

var reg = new RegExp($(element).attr('RegexExp'));
更新:您还需要去掉/字符,因为这些字符不应提供给RegExp构造函数:

var regexExp = $(element).attr('RegexExp');
var reg = new RegExp(regexExp.substring(1, regexExp.length - 1));

我假设您发布的代码是return语句中函数的一部分,但如果不是,您的第一个问题是
return
不允许在函数外使用

无论如何,请尝试以下方法。可以使用字符串的形式构造函数从字符串创建RegExp

value.search(new RegExp($(element).attr('RegexExp')));
此外,您不需要对值使用
toString()
,因为它已经是一个字符串,并且您的代码不必要地冗长。以下内容相当于您的第一条
if-else
语句

return value.search(new RegExp($(element).attr('RegexExp'))) != -1;

编辑:

如果希望能够以“/[expression]/”或“/[expression]/gi”的形式传入表达式,可以执行以下操作:

var toRegExp = function(regexString) {
    var expression   = regexString.substr(1),        // remove first '/'
        closingSlash = expression.lastIndexOf("/");  // find last '/'

    return new RegExp(
        // Expression: remove everything after last '/'
        expression.substr(0, closingSlash), 
        // Flags: get everything after the last '/'
        expression.substr(closingSlash+1)
    );
}

....

value.search( toRegExp($(element).attr('RegexExp')) );

我假设您发布的代码是return语句中函数的一部分,但如果不是,您的第一个问题是
return
不允许在函数外使用

无论如何,请尝试以下方法。可以使用字符串的形式构造函数从字符串创建RegExp

value.search(new RegExp($(element).attr('RegexExp')));
此外,您不需要对值使用
toString()
,因为它已经是一个字符串,并且您的代码不必要地冗长。以下内容相当于您的第一条
if-else
语句

return value.search(new RegExp($(element).attr('RegexExp'))) != -1;

编辑:

如果希望能够以“/[expression]/”或“/[expression]/gi”的形式传入表达式,可以执行以下操作:

var toRegExp = function(regexString) {
    var expression   = regexString.substr(1),        // remove first '/'
        closingSlash = expression.lastIndexOf("/");  // find last '/'

    return new RegExp(
        // Expression: remove everything after last '/'
        expression.substr(0, closingSlash), 
        // Flags: get everything after the last '/'
        expression.substr(closingSlash+1)
    );
}

....

value.search( toRegExp($(element).attr('RegexExp')) );
首先,不要使用自定义属性来保存正则表达式。第二,“regexxp”是多余的-这就像说“正则表达式”。第三,要将字符串转换为RegExp,必须使用
new RegExp()
包装字符串;JavaScript不是弱类型的。也就是说,假设正则表达式不是在服务器端设置的,我建议使用。它的另一个优点是可以直接存储正则表达式对象

设置:

jQuery.data($(element).get(0), "regexp", /^\d{5}$/);
要获得:

jQuery.data($(element).get(0), "regexp");
但最终,你真正想要的是。它能做你需要的一切,然后再做一些。顺便说一句,它在内部使用数据API来发挥其魔力

首先,不要使用自定义属性来保存正则表达式。第二,“regexxp”是多余的-这就像说“正则表达式”。第三,要将字符串转换为RegExp,必须使用
new RegExp()
包装字符串;JavaScript不是弱类型的。也就是说,假设正则表达式不是在服务器端设置的,我建议使用。它的另一个优点是可以直接存储正则表达式对象

设置:

jQuery.data($(element).get(0), "regexp", /^\d{5}$/);
要获得:

jQuery.data($(element).get(0), "regexp");
但最终,你真正想要的是。它能做你需要的一切,然后再做一些。顺便说一句,它在内部使用数据API来发挥其魔力


/../syntax用于在Javascript中声明正则表达式对象,因此您不应该使用它来指定正则表达式模式,它应该是
regexp=“^\d{5}$”

搜索方法将正则表达式对象作为参数,因此必须从属性中获取的字符串创建正则表达式对象:

var reg = new RegExp($(element).attr('regexp'));
if (value.toString().search(reg) != -1) {
(你看到与第二个案例的相似之处了吗?)

或者作为单个表达式:

if (value.toString().search(new RegExp($(element).attr('regexp'))) != -1) {

/../syntax用于在Javascript中声明正则表达式对象,因此您不应该使用它来指定正则表达式模式,它应该是
regexp=“^\d{5}$”
作为属性

搜索方法将正则表达式对象作为参数,因此必须从属性中获取的字符串创建正则表达式对象:

var reg = new RegExp($(element).attr('regexp'));
if (value.toString().search(reg) != -1) {
(你看到与第二个案例的相似之处了吗?)

或者作为单个表达式:

if (value.toString().search(new RegExp($(element).attr('regexp'))) != -1) {

您使用的是JQuery吗$()不是一个标准函数,所以请翻开它的文档,看看它对.attr()函数的说明。您使用的是JQuery吗$()不是一个标准函数,所以请翻开它的文档,看看它对.attr()函数的说明;var reg=“/^\d{5}$/”;reg=新的RegExp(reg.substring(1,reg.length-1));警报(v1.搜索(reg));它仍然给出-1您不能这样做,因为您需要在文本javascript字符串中转义反斜杠,如:var reg=“/^\\d{5}$/”。但是,如果直接从页面读取字符串,则不需要转义反斜杠;var reg=“/^\d{5}$/”;reg=新的RegExp(reg.substring(1,reg.length-1));警报(v1.搜索(reg));它仍然给出-1您不能这样做,因为您需要在文本javascript字符串中转义反斜杠,如:var reg=“/^\\d{5}$/”。但是,如果直接从页面读取字符串,则不需要转义反斜杠。当然,根据可用的库,可能有更好的方法来执行此操作,但使用自定义属性来保存任意数据没有什么错。哇,嘿,现在。。。那-1是不必要的。HTML规范不允许自定义属性