繁体   English   中英

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

[英]Use Variable in Regular Expression in javascript

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

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

我想使用这个正则表达式来匹配凌晨4点到9点。

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)

这个reg_expr匹配4h,5pm,8am .....

并且此变量用于从凌晨4点到9点匹配,

like var reg_data = ((reg_expr)(/\s(to)(?=\s)/gi)(reg_expr))...

可能吗。??? 如果是,那怎么办?

可能吗。???

如果是,那怎么办?

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

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

 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+))/; var reg_data = new RegExp( reg_expr.source + /\\s(to)(?=\\s)/.source + reg_expr.source, 'gi' ); alert(reg_data.source); 

如果您的正则表达式很复杂并且有时变得不可读,则可以考虑使用语法方法。 可以将语法声明为对象,将符号作为键并将相应的产生式作为值。 Productions实际上只是正则表达式,但是具有特殊的符号语法(例如@symbol )和空白以提高可读性。 当您需要符号的正则表达式时,您可以(临时)动态创建它:

 // grammar for time intervals times = { 'space' : '\\\\s+', 'digit' : '\\\\d', 'hours' : '@digit @digit?', 'minutes' : ': @digit @digit', 'suffix' : 'h | am | pm', 'time' : '@hours @minutes? @suffix?', 'interval': '@time @space to @space @time' }; // convert a grammar rule to regex function regex(grammar, symbol, flags) { function expand(s) { return s.replace(/@(\\w+)/g, function(_, $1) { return '(?:' + expand(grammar[$1]) + ')'; }); } return new RegExp( expand(grammar[symbol]).replace(/\\s+/g, ''), flags); } // test! interval = regex(times, 'interval', 'g'); test = '5h to 6h,4am to 9am,3pm to 8pm,4h to 9pm'; document.write(test.match(interval).join(' ; ')); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM