Skip to content

Instantly share code, notes, and snippets.

@zbinlin
Created August 12, 2015 09:31
Show Gist options
  • Save zbinlin/0a04ab6a1e4a9b1120c4 to your computer and use it in GitHub Desktop.
Save zbinlin/0a04ab6a1e4a9b1120c4 to your computer and use it in GitHub Desktop.
RegExp
let permut = (arr) => {
if (typeof arr === "string") {
arr = arr.split("");
}
if (arr.length === 1) {
return arr;
}
let rst = [];
for (let i = 0, len = arr.length; i < len; i++) {
let newArr = arr.slice();
let ch = newArr.splice(i, 1)[0];
permut(newArr).forEach(item => {
rst.push("" + ch + item);
});
}
return rst;
};
/* 给定的一个字符串(长度为 4),测试是否包含 "gimy"(位置不定)*/
let re1 = /([gimy])(?!\1)([gimy])(?!(?:\1|\2))([gimy])(?!(?:\1|\2|\3))([gimy])/;
let arr1 = permut("gimy");
for (let i = 0, len = arr1.length; i < len; i++) {
console.assert(re1.test(arr1[i]))
}
/* 给定的一个字符串(长度不大于 4,可以为空),测试是否包含 "gimy"(位置不定)*/
let re2 = /^(?:([gimy]))?(?:(?!\1)([gimy]))?(?:(?!(?:\1|\2))([gimy]))?(?:(?!(?:\1|\2|\3))([gimy]))?$/;
let arr2 = permut("gimy");
for (let i = 0, len = arr2.length; i < len; i++) {
console.assert(re2.test(arr2[i]))
}
console.assert(re2.test(""));
console.assert(re2.test("ig"));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment