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

Use Variable in Regular Expression in javascript

本文关键字:变量 正则表达式 javascript      更新时间:2023-09-26

使用正则表达式匹配此模式 - 5 小时到 6 点,凌晨 4 点到上午 9 点,下午 3 点到晚上 8 点,4 点到晚上 9 点......

我已经有正则表达式了 - 5 小时、下午 4 点、凌晨 5 点......

我想将此正则表达式用于凌晨 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匹配模式,如4小时,下午5点,上午8点.....

这个变量在比赛凌晨 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);

如果您的正则表达式很复杂并且在某个时候变得不可读,您可以考虑语法方法。语法可以声明为对象,符号作为键,相应的产品作为值。作品实际上只是正则表达式,但具有符号的特殊语法(如@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(' ; '));