我在使用正则表达式测试字符串时遇到问题。 迭代后“aab”,“aab”,“aba”..这里出现了问题,当测试字符串“baa”第一次没问题时,结果是假的,因为正则表达式测试设置为检查字符串中是否有重复的字母,但是在测试时再次“咩”的结果现在是真的。为什么会这样?
以下是代码:
//Here are function for swaping letters
String.prototype.swapLetters=function(index) {
var temp = this.split("");
var n = temp[index];
temp[index]=temp[index+1]; temp[index+1]=n;
var str1 = temp.join("");
return str1;
}
function permAlone(str) {
//the function for calculating number of total combinations
function returnFactorial(num){
if(num===0){
return 1;
} else {
return returnFactorial(num-1)*num;
}
}
var combs = returnFactorial(str.length);
var c = 0;
var permutations = 0;
var reg = new RegExp(/(.)\1+/g);
for (var i = 0; i < combs; i++) {
if(c>=str.length-1){
c = 0;
}
str = str.swapLetters(c);
if(!reg.test(str)){
permutations++;
console.log(str);
}
c++;
}
}
permAlone('aab');
答案 0 :(得分:0)
首先,如果您打算识别正则表达式匹配,则if(!reg.test(str)){}
的条件不应该包含!(不)。不过,我不确定这是不是你想要的。
其次,我删除了'全局'匹配标志'g',以便正则表达式基本上“重置”,以便在每次执行之前从文本的开头开始匹配。这是因为多次执行单个RegExp对象时,每次从最后一个匹配索引开始匹配文本。这可以为您提供详细的解释。 Why RegExp with global flag in Javascript give wrong results?
试试这个。
//Here are function for swaping letters
String.prototype.swapLetters=function(index) {
var temp = this.split("");
var n = temp[index];
temp[index]=temp[index+1]; temp[index+1]=n;
var str1 = temp.join("");
return str1;
}
function permAlone(str) {
//the function for calculating number of total combinations
function returnFactorial(num){
if(num===0){
return 1;
} else {
return returnFactorial(num-1)*num;
}
}
var combs = returnFactorial(str.length);
var c = 0;
var permutations = 0;
var reg = new RegExp(/(\w)\1+/);
for (var i = 0; i < combs; i++) {
if(c>=str.length-1){
c = 0;
}
str = str.swapLetters(c);
console.log("case : " + str);
if(reg.test(str)){
permutations++;
console.log(str + " has repeated letters");
}
c++;
}
}
permAlone('aab');