在javascript的正则表达式中使用变量

在javascript的正则表达式中使用变量,javascript,regex,Javascript,Regex,使用正则表达式匹配此模式-5h到6h、4am到9am、3pm到8pm、4h到9pm 我已经有了-5h,4pm,5am的正则表达式 我想用这个正则表达式来匹配4am到9am like var reg_expr = (/(\d{1,2}?h$)|(\d{1,2}h(?=\s+))|(\d{1,2}:\d{2}([ap]m)?$)|(\d{1,2}:\d{2}([ap]m)(?=\s+))|(\d{1,2}:\d{2}(?=\s+))|(\d{1,2}([ap]m)?$)|(\d{1,2}([ap]m

使用正则表达式匹配此模式-5h到6h、4am到9am、3pm到8pm、4h到9pm

我已经有了-5h,4pm,5am的正则表达式

我想用这个正则表达式来匹配4am到9am

like var reg_expr = (/(\d{1,2}?h$)|(\d{1,2}h(?=\s+))|(\d{1,2}:\d{2}([ap]m)?$)|(\d{1,2}:\d{2}([ap]m)(?=\s+))|(\d{1,2}:\d{2}(?=\s+))|(\d{1,2}([ap]m)?$)|(\d{1,2}([ap]m)(?=\s+))/gi)
此注册表表达式与4h、5pm、8am等模式匹配

这个变量在匹配4am到9am时使用

like var reg_data = ((reg_expr)(/\s(to)(?=\s)/gi)(reg_expr))...
有可能吗。??? 如果是,那么如何

有可能吗

如果是,那么如何

您可以通过调用
#toString
方法或使用
source
属性来获取RegExp对象的字符串表示形式

此外,还可以从字符串创建
RegExp
对象

[代码>var>代码>var>上述任何地区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府工程区的政府军=////////////([[[[1,2.2}{录录录录录录录录录录录录录录录录录录录录录录录录录录录录录录录录录录录上述上述上述上述上述上述上述上述上述上述上述上述的,,,,,,,,,,,,,[[[上述上述上述<<<<<<<<<<<<<<<<编码编码编码编码编码编码>」」」」」」」」」」」))))的,,///////////////////////////////; var reg_data=新的RegExp( reg_expr.source+ /\s(to)(?=\s)/.source+ 注册expr.source, “gi” );
警报(注册表数据源)

如果正则表达式复杂且在某个点变得不可读,你可能会考虑语法方法。语法可以声明为对象,符号作为键,相应的结果作为值。产品实际上只是正则表达式,但有特殊的符号语法(如

@symbol
)和空格以便于阅读。当您需要一个符号的正则表达式时,您(通常)会动态创建它:

//时间间隔语法
次数={
“空格”:“\\s+”,
“数字”:“\\d”,
“小时数”:“@digit@digit?”,
“分钟”:“:@digit@digit”,
‘后缀’:‘h | am | pm’,
“时间”:“@hours@minutes?”后缀“,
“间隔”:“@time@space到@space@time”
};
//将语法规则转换为正则表达式
函数regex(语法、符号、标志){
功能扩展{
返回s.replace(/@(\w+)/g,函数(1){
返回“(?:”+扩展(语法[$1])+”;
});
}
返回新的RegExp(
展开(语法[符号])。替换(/\s+/g',),
旗帜);
}
//测试!
间隔=正则表达式(乘以“间隔”、“g”);
测试=‘5小时至6小时、上午4时至9时、下午3时至8时、下午4时至9时’;

document.write(test.match(interval.join)(“;”)不能直接组合两个正则表达式对象。您可以获取指定正则表达式的两个字符串并将这两个字符串组合起来,然后执行
var regex=new RegExp(str1+str2)
甚至
var regex=new RegExp(“(“+str1+”)”)+str2)
。因此,基本上使用其他字符串变量的字符串操作构建正则表达式字符串,然后从组合字符串创建一个新正则表达式。str1=“pattern(/s+)”msg=“pattern pattern matching pattern.”var re=new RegExp(str1,“g”);变量温度=消息匹配(re);在本例中,temp为null…因为我添加了/s+,如何在模式之后添加空格..???如果您想将时间作为不同的值提取出来,那么首先在逗号上拆分字符串,然后在“to”上拆分,包括每个拆分中的可选空格。@Stephan的可能副本:正式语法早在正则表达式之前就存在了。