遍历包含正则表达式的 JavaScript 对象变量

iterate over javascript object variables containing regex expressions

本文关键字:对象 变量 JavaScript 包含 正则表达式 遍历      更新时间:2023-09-26

我想知道这是否可能。我正在尝试迭代包含正则表达式的对象,如下所示:

var formats = {
    AUS:"/^'D*0('D*'d){9}'D*$/",
    UK: "/^'D*0('D*'d){9}'D*$/"
        };
    var matched = false;
for (var i in formats) {
    if (!matched) {
        var format = formats[i];
        matched = value.match(formats[i]);
    }
}

我很欣赏澳大利亚和英国的表达是相同的价值,但这只是为了证明这个概念。

我匹配的值是0423887743,当我执行以下操作时它可以工作:

value.match(/^'D*0('D*'d){9}'D*$/);

将其更改为:

var formats = {
   AUS:/^'D*0('D*'d){9}'D*$/,
   UK: /^'D*0('D*'d){9}'D*$/
};

你拥有它的方式,它是字符串而不是正则表达式。

string.match 将正则表达式作为参数,但您传递的是一个字符串。

您可以在对象中存储正则表达式:

var formats = {
    AUS: /^'D*0('D*'d){9}'D*$/,
    UK: /^'D*0('D*'d){9}'D*$/
        };

或者从字符串创建正则表达式:

var format = new RegExp(formats[i]);
matched = value.match(format);    

我不确定你为什么需要这么奇怪的正则表达式,这是工作代码:

var formats = {
 AUS:"^0[0-9]{9}$",
 UK: "^0[0-9]{9}$"
};
var matched = false;
var value = '0423887743';
for (var i in formats) {
    if (!matched) {
        var format = formats[i];
        var re = new RegExp(formats[i]);
        matched = ( re.exec(''+value) != null );
    }
}
alert(matched);

注意:此代码假设您的格式是字符串,因此您不需要/在开头和结尾,如果您需要它们 - 存储不带引号,它将是正则表达式