这行Javascript Regex有什么作用?

时间:2014-04-23 23:50:13

标签: 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来理解它。有人可以向我解释这条线的作用吗?

由于

1 个答案:

答案 0 :(得分:2)

[1]引用第一个也是唯一一个捕获组(.+?).match()方法返回一个由完全匹配(第0个元素)组成的数组,任何捕获组都将填充数组中的其他值。只有当g标志设置时,它才会以这种方式工作。

当找不到匹配项时,

|| []extendedXmp设置为空数组。它是一个有点简洁的JavaScript功能,以及一种设置变量的方法,如果评估结果是“假”&#34;价值,虽然我倾向于避免它,以便在我写作中更明显和清晰。话虽如此,根据代码判断,没有真正的理由这样做。可以轻松简洁地避免整个|| []考验,并使用if (extendedXmp !== null)进行测试,而且对于其他开发人员来说,它会更清晰,更清晰,更容易阅读。你或我。