有问题的一行就是这一行:
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来理解它。有人可以向我解释这条线的作用吗?
由于
答案 0 :(得分:2)
[1]
引用第一个也是唯一一个捕获组(.+?)
。 .match()方法返回一个由完全匹配(第0个元素)组成的数组,任何捕获组都将填充数组中的其他值。只有当g
标志不设置时,它才会以这种方式工作。
|| []
将extendedXmp
设置为空数组。它是一个有点简洁的JavaScript功能,以及一种设置变量的方法,如果评估结果是“假”&#34;价值,虽然我倾向于避免它,以便在我写作中更明显和清晰。话虽如此,根据代码判断,没有真正的理由这样做。可以轻松简洁地避免整个|| []
考验,并使用if (extendedXmp !== null)
进行测试,而且对于其他开发人员来说,它会更清晰,更清晰,更容易阅读。你或我。