[英]JavaScript: avoiding empty strings with String.split, and regular expression precedence
[英]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
方法調用的replace
和replaces
以及format
作為函數及其參數之一使代碼難以閱讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.