匹配括号的Javascript正则表达式

时间:2018-11-07 04:43:30

标签: javascript regex match

尝试执行一个JS函数,该函数将以'{name}(n)'的形式生成一个新名称,其中n是给定名称列表中的下一个整数值。例如。给定“名称”,“名称(1)”,“名称(2)”,函数应返回“名称(3)”。显然,使用正则表达式功能是可行的方法,但是我在方括号方面遇到了麻烦。这就是我所拥有的

utilitiesService.getNextUniqueName = function (name, arr) {
    var uniqueName = name;
    var max = -1;

    var matchStr = new RegExp('^' + name + '( \\((\d{1,})\\)){0,1}');
    arr.forEach(function (element) {
        var match = element.match(matchStr);
        if (match && match.length > 0) {
            if (match[2] == null) { 
                max = max < 0 ? 0 : max;
            } else {
                max =  max < Number(match[2]) ? Number(match[2]) : max;
            }
        }
    });

    if (max >= 0) {
        uniqueName = uniqueName + ' (' + String(max + 1) + ')';
    };

    return uniqueName;
}

参数'name'-给出列表基本名称的字符串,'arr'-给出现有名称的字符串数组(并非所有字符串都匹配该基本名称)。 匹配有效,但问题是返回的数组“ match”从不包含应由最里面的“(/ d {1,})”赋予的数字部分。实际上,它只包含未定义的数组元素1和2。 我在做什么错了?

1 个答案:

答案 0 :(得分:0)

在上述评论中,Phil回答了我的问题-使用RegExp构造函数时,我无法正确转义所有特殊字符。