Skip to content

Instantly share code, notes, and snippets.

@MondoGao
Created April 13, 2017 03:40
Show Gist options
  • Save MondoGao/89fd047d979f4dba35c567f5eb9dbb8a to your computer and use it in GitHub Desktop.
Save MondoGao/89fd047d979f4dba35c567f5eb9dbb8a to your computer and use it in GitHub Desktop.
/**
*
* @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