Created
April 13, 2017 03:40
-
-
Save MondoGao/89fd047d979f4dba35c567f5eb9dbb8a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* | |
* @param str 待匹配字符串 | |
* @param pattern 模式串 | |
*/ | |
const isMatch = (str, pattern) => { | |
let strArr = str.split('') | |
let patArr = pattern.split('') | |
strArr.pointer = 0 | |
patArr.pointer = 0 | |
patArr.lastChar = '' | |
while (strArr.pointer < strArr.length) { | |
if (patArr.pointer >= patArr.length) { | |
return false | |
} | |
if (patArr[patArr.pointer] === '.' || strArr[strArr.pointer] === patArr[patArr.pointer]) { | |
patArr.lastChar = patArr[patArr.pointer] | |
strArr.pointer++ | |
patArr.pointer++ | |
} | |
// 当前字符不匹配 | |
else if (patArr[patArr.pointer] === '*') { | |
if (patArr.lastChar === '.' || strArr[strArr.pointer] === patArr.lastChar) { | |
strArr.pointer++ | |
} else { | |
patArr.pointer++ | |
patArr.lastChar = '*' | |
} | |
} | |
// * 号和 * 前字符匹配失败 | |
else { | |
// 下一个字符不是 * | |
if (patArr[patArr.pointer + 1] !== '*') { | |
return false | |
} else { | |
patArr.lastChar = '*' | |
patArr.pointer += 2 | |
} | |
} | |
} | |
// 匹配串未走完的情况下 | |
while (patArr.pointer < patArr.length) { | |
if (patArr[patArr.pointer] === '*') { | |
patArr.pointer++ | |
} else { | |
return false | |
} | |
} | |
return true | |
} | |
console.log(isMatch("aa","a")) | |
console.log(isMatch('aa', 'aa')) | |
console.log(isMatch('aaa', 'aa')) | |
console.log(isMatch('aa', 'a*')) | |
console.log(isMatch('aa', '.*')) | |
console.log(isMatch('ab', '.*')) | |
console.log(isMatch('aab', 'c*a*b')) | |
console.log(isMatch('aaaaabbb','.*a')) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment