有問題的線是這個:Javascript Regex這行是做什麼用的?
var extendedXmp = (data.match(/xmpNote:HasExtendedXMP="(.+?)"/i) || [])[1];
正是在這裏更大的代碼塊的一部分:
this.parseCompoundImage = function(data) {
var extendedXmp = (data.match(/xmpNote:HasExtendedXMP="(.+?)"/i) || [])[1];
if (extendedXmp) {
// we need to clear out JPEG's block headers. Let's be juvenile and don't care about checking this for now, shall we?
// 2b + 2b + http://ns.adobe.com/xmp/extension/ + 1b + extendedXmp + 4b + 4b
data = data.replace(new RegExp('[\\s\\S]{4}http:\\/\\/ns\\.adobe\\.com\\/xmp\\/extension\\/[\\s\\S]' + extendedXmp + '[\\s\\S]{8}', 'g'), '')
}
var xmp = data.match(/<x:xmpmeta [\s\S]+?<\/x:xmpmeta>/g),
result = {}
if (!xmp) throw "No XMP metadata found!";
xmp = xmp.join("\n", xmp);
它來自the source code of the depthy app。這段代碼獲取XMP元數據,並使用正則表達式清除JPEG exif頭。這段代碼的第二行是讓我困惑的。根據我的理解,它會嘗試匹配數據中的某種模式,但我對JavaScript不太瞭解,無法理解它。有人能向我解釋那條線是幹什麼的嗎?
感謝
什麼讓你困惑?正則表達式模式本身或調用'match'或'|| []',還是最後的'[1]'?實際上這方面有很多事情要做,也許你只需要分解它,並嘗試單獨瞭解每一點。 –
讓我困惑的是,從我理解的匹配應該返回一個字符串,但它然後與'[]'進行比較,它試圖實現什麼?最後,'[1]'意味着讓第二個字符正確? – Shef
謝謝。我現在明白了:該文件有一行說: 'xmpNote:HasExtendedXMP =「FF72 ...」/>'此代碼匹配FF72 ...'。如果註釋不存在,則用空數組替換它。你想寫它作爲答案,所以我可以接受它嗎? – Shef