我定义了一些简单的正则表达式为:
var PIPE= /^\|/;
var START= /^{{/;
var s= "{{hello";
var tSet={PIPE:true, START:true}
var test= "";
for(t in tSet){
if(s.match(t)!=null){
test= test+ s.match(t);
}
}
但是它从不匹配任何东西,所以我寻找了t的类型
typeof t; //returns string
但是t是一个字符串。如何确定t是包含正则表达式的变量?我试过了
for(t in tSet){
var b= new RegExp(t);
if(s.match(b)!=null){
test= test+ s.match(b);
}
}
但它仍然不起作用。我该如何打字,使其将t识别为正则表达式而不是字符串?
最佳答案
您的代码有两个问题。首先是tSet
对象的初始化。您正在使用字符串->布尔对创建对象。 JSON表示形式为:
{
"PIPE":true,
"START":true
}
接下来,当使用
for (x in y)
遍历对象时,x
是对象中的每个键,而不是值。您可以使用
tSet[t]
来获取布尔值。为了从变量名中获取正则表达式值,窗口对象允许这样做:
window[t]
。接下来,您最终得到:
var PIPE= /^\|/;
var START= /^{{/;
var s= "{{hello";
var tSet={PIPE:true, START:true}
var test= "";
for(t in tSet){
if (!tSet[t]) { // If the value is false
continue; // Skip this one and continue to the next
}
if(s.match(window[t])!=null){
test = test + s.match(window[t]);
}
}
但是,此时有一种更简单的方法,我认为这可能就是您最初想做的。假设您不需要布尔值,则应使用一个数组:
var PIPE = /^\|/;
var START = /^{{/;
var s = "{{hello";
var tSet = [PIPE, START] // This creates an array with the values of the variables.
var test = "";
for (var i = 0; i < tSet.length; i++) { // For each regex in the array
if(s.match(tSet[i]) != null){
test = test + s.match(tSet[i]);
}
}