0

我有以下代码:

    if ($selectInput.data('propagate-title') === 'yes') {
        var m = this.id.match(/^modal_TempRowKey_(\d+)$/);
        if (m) {
            $("#modal_Title_" + m[1]).val(title);
        }
    }

有人可以解释返回并放入 m 中的内容吗?我可以将代码更改为以下代码并使其工作相同吗?

    if ($selectInput.data('propagate-title') === 'yes') {
        var m = this.id.match(/^modal_TempRowKey_(\d+)$/)[1];
        if (m) {
            $("#modal_Title_" + m).val(title);
        }
    }
4

2 回答 2

4

这两个代码片段之间有一个重要的区别。您不能进行您希望的更改,因为如果没有匹配,null将从match操作中返回,以及评估结果

null[1]

会抛出一个错误,比如

TypeError: Cannot read property '1' of null

如果正则表达式匹配或不匹配,则返回值match是一个数组null。返回数组的元素 0 是整个匹配项,元素 1 将是括号对中以 first 开头的匹配项(。在第一个代码片段中,值m[1]是 后面的数字序列"modal_TempRowKey_"

编辑:有关所有详细信息,请参阅 Kyle 在对原始问题的评论中提供的链接。

于 2012-09-26T04:17:56.680 回答
1

这是匹配方法的解释。 包含匹配项的数组,每个匹配项一个,如果未找到匹配项,则为 null

id 与您的正则表达式匹配,它返回数组或 null,并且返回的数组分配给 m。所以 m 1在第一个代码中使用。

id 与您的正则表达式匹配,它返回数组并将数组1分配给 m。所以 m 在第二个代码中使用。

如果您的 id 不匹配大小写,在第二个代码中您会得到 null 或未定义的异常,但首先不会。

于 2012-09-26T04:21:44.783 回答