簡體   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