簡體   English   中英

JavaScript正則表達式優先規則

[英]JavaScript regular expression precedence rules

這是如何運作的?

代碼:

a = {
    replacers: {
        YYYY: function () {
            return this.getFullYear();
        },
        dd: function () {
            var me = this,
                day = me.getDate();

            return (day < 10 ? '0' : '') + day;
        },
        d: function () {
            var me = this;

            return me.getDate();
        }
    },
    format: function (date, format) {
        var replacers = a.replacers;

        // I just added a plus to get multiple digits and it works...
        return format.replace(/\{([Yd]+)\}/g, function (str, p1) {
            var formatter = replacers[p1];
            if (formatter)
                return formatter.call(date);
        });
    }
};

document.write(a.format(new Date(), '{dd} {d} {YYYY} {d} {dd}'));

結果:

05 5 2013 5 05

使用+標識一個或多個字符是否正確?

擴展替換功能時,這里有什么陷阱嗎? 我最擔心的是{xx}之前{xxx} {xx}會有一場比賽。

([d]+)或僅(d+)將貪婪地匹配並捕獲一個或多個"d"

([d]+)? (d*)會貪婪地匹配並捕獲零個或多個"d"

對於延遲匹配? 需要在量詞之后立即添加,即d+? ,但是這里沒有必要,因為d+\\}d+?\\}將始終完全相同,因為對於} ,所有d都需要匹配。

懶惰僅在存在可以匹配特定字符的選項時才有意義。 例如,當匹配字符串"ddde" ,則匹配d+. 將匹配整個字符串和d+?. 只能匹配dd因為. 可以匹配第二個d

你說你要“確保{xxx}總是前處理{xx}之前總是處理{x} ”,但一個較早的是字符串中是一個將首先匹配無論比賽是否懶惰。 無論如何,我看不出這怎么回事-也許您可以進一步解釋為什么這會成為問題。

從代碼中還不清楚為什么只在將要包含的功能包含在replace回調中時才使用replaces對象。 而您選擇的標識符,涉及replace方法調用的replacereplaces以及format作為函數及其參數之一使代碼難以閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM