尝试执行一个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。 我在做什么错了?
答案 0 :(得分:0)
在上述评论中,Phil回答了我的问题-使用RegExp构造函数时,我无法正确转义所有特殊字符。